4 votes

Observable Collections Collection Changed

Très rapide sur les collections observables. Je me suis amusé avec ces collections dans Silverlight en faisant des trucs de liaison, etc. Il semble que l'événement CollectionChanged se déclenche lors de la suppression ou de l'ajout d'un élément dans la collection. J'aimerais que l'événement se déclenche lorsque je modifie une propriété d'une des classes de la collection. La propriété de la collection elle-même possède déjà l'événement RaisePropertyChanged. Dois-je faire quelque chose de spécial pour la classe de type elle-même ? Donc, si j'ai ceci :

ObservabelCollection<Person> personcollection... and if I change a property like:

Person p = personcollection.where(e => e.FirstName == "Joey").FirstOrDefault();
if (p != null) { p.FirstName = "Joe"; }

Je m'attendrais à ce que quelque chose se passe dans l'interface utilisateur, mais rien ne change.

Toute aide serait grandement appréciée.

David

2voto

Dima Pasko Points 837

Pour obtenir des mises à jour pour Person vous devez implémenter INotifyPropertyChanged pour eux.

2voto

Chris Points 2253

Je vois ce que vous essayez de faire, mais si je ne me trompe pas, Observable Collection ne fait que soulever le problème de l'affichage de l'image. INotifyCollectionChanged lorsque les éléments de sa collection changent. Cela déclenchera des changements dans l'interface utilisateur.

Il ne se soucie pas de savoir si une propriété d'un de ses objets dans sa collection change. Vous devez implémenter la méthode INotifyPropertyChanged Interface sur les propriétés de ces objets pour déclencher une modification de l'interface utilisateur.

J'ai lu ici qui m'a donné un aperçu utile. Bien qu'il soit destiné à WPF, la plupart des informations sont toujours valables, car Silverlight est essentiellement un sous-ensemble de WPF.

En plus de cela MSDN article qui stipule :

 In particular, if you are using OneWay or TwoWay (for example, 
 you want your UI to update when the source properties change dynamically), 
 you must implement a suitable property changed notification mechanism 
 such as the INotifyPropertyChanged interface.

0voto

Peter Porfy Points 4351

INotifyCollectionChanged censé prévenir quelqu'un quand la collection a changé.

INotifyPropertyChanged censé notifier quelqu'un quand une propriété d'un objet a changé.

Un objet d'une classe doit implémenter l'interface et doit déclencher les événements correctement. Ainsi, si vous le liez via l'objet Binding, l'interface utilisateur peut se mettre à jour.

Collection d'Observables met en œuvre INotifyCollectionChanged correctement, mais il n'a rien à voir avec les objets qu'il contient. Parce que si la propriété d'un objet a changé qui n'est pas un événement CollectionChanged . C'est un Événement PropertyChanged de l'objet concret dans la collection. Vous devez donc implémenter la méthode INotifyPropertyChanged dans votre classe Personne.

0voto

dthorpe Points 23314

En ObservableCollection ne signale pas les modifications apportées aux propriétés des objets de la collection.

Pour obtenir ce comportement, vous devrez accrocher l'option INotifyPropertyChanged.PropertyChanged pour chaque objet enfant lorsqu'il est inséré dans votre collection. Vous pouvez effectuer cette opération dans l'élément CollectionChanged événement. N'oubliez pas de décrocher les événements lorsque les enfants sont retirés de la collection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X