Hi have 2 Entry in my Listview and 1 image clickable.
-click Image => clear row Listview (no problem).
-filling the first Entry and unfocus => create new row listview (no problem).
-filling the first Entry and unfocus(create new row listview), then filling second Entry and unfocus ==> if i focus second row and add just one char, the Entry unfocus automaticly and create new row list view ?????
After 3 days... i don't understand this behavior
`
<ListView SeparatorVisibility="None" HasUnevenRows="True" x:Name="listevisible" ItemsSource="{Binding ChirurgieList}">
<ListView.ItemTemplate>
<DataTemplate>
<local:Chirurgie>
<StackLayout x:Name="{Binding IdEntry}">
<StackLayout Orientation="Horizontal">
<Frame BackgroundColor="{StaticResource Leviolet}" Padding="2" HasShadow="False" HorizontalOptions="FillAndExpand" InputTransparent="True">
<Entry Text="{Binding Chir}"
x:Name="{Binding IdEntry}"
ClassId="{Binding IdEntry}"
Keyboard="Text"
Placeholder="(vide)"
Style="{StaticResource Poursaisi}"
FontSize="Medium"
BackgroundColor="#f1f0f0"
HorizontalTextAlignment="Start"
Focused="Entry_Focusedchir"
Unfocused="Saisichir_Unfocused"/>
</Frame>
<Frame BackgroundColor="{StaticResource Leviolet}" Padding="2" HasShadow="False" WidthRequest="60" >
<Entry Text="{Binding Annee}"
x:Name="{Binding Iddate}"
ClassId="{Binding Iddate}"
Keyboard="Numeric"
Placeholder="(vide)"
Style="{StaticResource Poursaisi}"
FontSize="Medium"
BackgroundColor="#f1f0f0"
HorizontalTextAlignment="Center"
/>
</Frame>
<StackLayout ClassId="{Binding IdEntry}"
Orientation="Horizontal"
HorizontalOptions="End"
WidthRequest="27" >
<Image Source="{StaticResource effacement}" WidthRequest="20"/>
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
</Image.GestureRecognizers>
<Image/>
</StackLayout>
</StackLayout>
<BoxView HeightRequest="5"/>
</StackLayout>
</local:Chirurgie>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
`
and my Cs page
`
public partial class Page6 : ContentPage
{
public Dictionary<int, Entry> GroupEntry { get; set; }
public ObservableCollection<Chirurgie> ChirurgieList = new ObservableCollection<Chirurgie>();
public string AVsaisi;
public string AVdate;
public int compteur = 0;
public Page6()
{
InitializeComponent();
foreach (var s in (Array)Application.Current.Resources["AtcdChir"])
{ listevisible.ItemsSource = CreateItems(((Chirurgie)s).Chir, ((Chirurgie)s).Annee);}
}
//################### FOCUS ENTRY #######################
private void Entry_Focusedchir(object sender, FocusEventArgs e)
{
AVsaisi = ((Entry)sender).Text;
}
//################### UNFOCUS ENTRY #######################
private void Saisichir_Unfocused(object sender, FocusEventArgs e)
{
// zone de texte est vide on ne fait rien
if (string.IsNullOrWhiteSpace(((Entry)sender).Text))
{
//si le conteneur etait plein auparavant on efface le conteneur
if (!string.IsNullOrWhiteSpace(AVsaisi))
{
int test = 25;
foreach (var item in ChirurgieList)
{
// Si l'ID de l'entrer est egale a la valeur d'un IdEntry présent dans la liste des maladie on le supprime
if (((Entry)sender).ClassId == item.IdEntry.ToString())
{
//numero ID a effacer
//test = item.IdEntry;
// il faut retrouver l'index ce cette idée unique
test = ChirurgieList.IndexOf(item);
}
}
ChirurgieList.RemoveAt(test);
}
//si il etait déja vide on ne fait rien
else
{ }
}
//si zone de texte remplie
else
{
//mais déja remplis au focus (donc deja eu creation d'un conteneur)
if (!string.IsNullOrWhiteSpace(AVsaisi))
{ }
// le champs a été remplis on ajoute un nouveau conteneur vide
else
{
listevisible.ItemsSource = CreateItems(string.Empty, string.Empty);
}
}
}
//################### CLIC BOUTON EFFACEMENT #######################
private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
int indexaEffacer=20000;
bool remplissage = false;
// on obtient l'ID de l'image grâce au ClassId du stacklayout conteneur
string LAid = ((StackLayout)sender).ClassId;
//on passe en revue chaque item (les stacklayout conteneur)
foreach (var item in ChirurgieList)
{
// Dans chaque item on va chercher la valeur de idEntry et on la compare a la valeur de "ClassId" du conteneur de l'image
if (LAid == item.IdEntry.ToString())
{
// dans cet item on va chercher la valeur de "Chir"
if (string.IsNullOrWhiteSpace(item.Chir))
{
// elle est vide on ne fait rien
}
// la valur chir n'est pas vide
else
{
//on efface cette item c'est a dire tous le stacklayout.
//on recupere l'index de cette item
indexaEffacer = ChirurgieList.IndexOf(item);
remplissage = true;
}
}
}
// seulement si champs remplis
if (remplissage)
{ ChirurgieList.RemoveAt(indexaEffacer); }
}
public ObservableCollection<Chirurgie> CreateItems(string lachir, string lanee)
{
var items = ChirurgieList;
var uniqueID = compteur;
ChirurgieList.Add(new Chirurgie() {IdEntry = uniqueID, Chir = lachir, Iddate = "A" + uniqueID, Annee = lanee });
compteur++;
return items;
}
}
`
And class
` public class Chirurgie : ViewCell
{
public string Chir { get; set; }
public int IdEntry { get; set; }
public string Iddate { get; set; }
public string Annee { get; set; }
}`
I think there is a confusion of the two entry but....
thx for your help