Bonjour,
J'ai une liste "List<Valeur>" qui contient une collection d'instance de Valeur.
J'ai une Page qui contient un ListView dont le ItemsSource est un sous-ensemble de ma liste :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 List<Valeur> Valeurs = new List<Valeur>(); Valeurs.Add(...); listValeurs.ItemsSource = Valeurs.Where(valeur => valeur.MaProprieteQuiVaBien <= 6);
Ensuite, sur le double-tap de la ListView, je navigue vers une autre Page, en passant l'item sélectionné en paramètre, qui est une référence à une ligne de ma List<Valeur> :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private void listValeurs_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { Frame.Navigate(typeof(Detail), (sender as ListView).SelectedItem as Valeur); }
Et je récupère ensuite dans ma page Detail :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 protected override void OnNavigatedTo(NavigationEventArgs e) { valeur = e.Parameter as Valeur; txtValeur.Text = valeur.MaProprieteQuiVaBien.ToString(); base.OnNavigatedTo(e); }
Je met ensuite à jour mon objet "valeur", qui est, selon moi, une référence à l'objet reçu en paramètre, donc toujours lié à mon List<Valeur> de la page principale :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 private void btnSave_Click(object sender, RoutedEventArgs e) { msgError.Text = string.Empty; StringBuilder sb = new StringBuilder(); int val = -1; if (!int.TryParse(txtValeur.Text, out val)) { sb.Append("La valeur doit être un nombre entier positif\n"); } else if (val < 1) { sb.Append("La valeur doit être un nombre entier positif\n"); } msgError.Text = sb.ToString(); if (msgError.Text.Length > 0) { return; } else { valeur.MaProprieteQuiVaBien = val; Frame.GoBack(); } } }
Et là, retour sur la page principale : la propriété de l'objet que j'ai modifié n'est pas mise à jour.
Qu'à cela ne tienne, je me dis que c'est un souci de refresh qui ne s'est pas fait. Après tout, le binding, ça marche quand ça veut...
Je réouvre le détail, et je retrouve la valeur avant modification.
J'en déduis qu'à un moment, au lieu de passer mon "Valeur" par référence, il le passe par valeur, et du coup je modifie non pas l'instance qui se trouve dans mon List<Valeur>, mais une copie... seulement c'est à quel moment qu'à lieu cette recopie ? Comment l'en empêcher ?
Partager