8
votes

Quel est le but d'avoir mis en œuvre inotifyPropertychangned sur Observablecollection?

Observablecollection implémente à la fois inotifidCollectionChanged et inotifypropertychanged . .

  • Je comprends que des ajouts, Suppression (+ clair) et remplacement d'articles sont notifiables aux consommateurs Grâce à la collection s CollectionChanged , et cette mise à jour dans les articles existants peut être Surveillé à l'aide de l'événement Articles ' Propertychanged s'ils implémentent eux-mêmes inotifypropertychandesd .

  • j'ai lu des autres que vous ne pouvez pas Inscrivez-vous sur l'événement de la collection Propertychanged parce qu'il est Readonly.

    alors quel est son but, quelle utilisation pouvons-nous faire de celui-ci ?

    Les commentaires ici et il semble que la discussion soit confondue en impliquant que la magie de Observablecollection est de mettre en oeuvre les deux interfaces, ce qui permet d'être notifié à la fois pour la collecte et les éléments changements de contenu, tandis que ce n'est pas Correct (ceci est ignoré par de nombreux exemples dans lesquels la collection est liée à une liste de liste qui met à jour par magie une fois que les éléments sont modifiés, vous suggérez la collection notifie la liste de liste).

    En réalité, il semble que la seule supériorité de la collection est d'implémenter inotifidcollectionchangned . Traiter avec les articles Les modifications de propriété ne semble pas plus facile avec observableCollection qu'avec une autre collection: il est possible uniquement si les éléments implémentent inotifypropertychanged , ce qu'ils peuvent ne pas faire, et si le Utilisateur parvient à accrocher à cet événement indépendamment de la collection.

    est-ce correct?


0 commentaires

3 Réponses :


1
votes

Juste une supposition: Donc, on peut être informé des modifications apportées à la propriété de comptage de la collection?


0 commentaires

3
votes

Le mécanisme de liaison WPFS peut utiliser INOTIFYPROPERTYCHANGED (INPC) hors de la boîte.

INPC Comme son nom l'indique permet à WPF de détecter les modifications apportées aux propriétés des objets pouvant ou non faire partie d'une collection.

Observablecollection (OC) implémente InotiferCollectionChanged (InCC) où vous dites que la collection elle-même notifie WPF (et quiconque équipé pour gérer les mises à jour) des mises à jour de sa collection d'éléments (suppressions supplémentaires). Si l'OC contient des objets qui ne mettent pas eux-mêmes mis en œuvre INPC, le WPF n'a aucun moyen de savoir comment chaque propriétés d'éléments a changé.

mise à jour

En répondant à la question suivante "Pouvons-nous compter sur l'événement de la collection d'APC au lieu d'enregistrer sur chaque nouvel article pour être notifié?" La réponse est non. Si chaque élément ne met pas en œuvre l'INPC sur ses propriétés, le WPF n'a aucun moyen de savoir quelles valeurs ont changé sur une base par article.

WPF connaîtra toujours du CO lorsque les articles ont été ajoutés ou supprimés en partie. Les articles La propriété utilise l'INPC pour notifier les mises à jour, telles que n'importe quelle classe implémentant INPC sur ses propriétés. IncC est implémenté pour suivre les modifications de collecte non pas de valeurs sur chaque élément dans les éléments.


0 commentaires

9
votes

Si vous regardez le code source code> code source avec le réflecteur, vous pouvez voir que cet événement est soulevé pour deux propriétés:

INotifyPropertyChanged inpc = myObservableCollection;
inpc.PropertyChanged += myEventHandler;


2 commentaires

Bien que fait précis et succincte, je ne suis pas sûr de savoir comment cela répond au "alors quel est le but?" partie du q


Le but est de notifier aux abonnés que la collection a changé. Dans cet aspect, il sert le même objectif que l'événement de collectionChanged, mais inotifypropertychanged est plus largement supporté que l'inotifyCollectionChanged