Die MSDN-Referenzseite für ObservableCollection<T>
Notizen:
"Die Objekte in Ihrer Sammlung müssen die Anforderungen erfüllen, die im Binding beschrieben sind Quellenübersicht , insbesondere wenn Sie OneWay oder TwoWay (Sie möchten beispielsweise, dass Ihre Benutzeroberfläche aktualisiert wird, wenn sich die Quelleigenschaften dynamisch ändern). Sie müssen einen geeigneten Benachrichtigungsmechanismus für die Eigenschaftenänderung implementieren, z. B. INotifyPropertyChanged Schnittstelle."
Da ObservableCollection<T>
bereits INotifyPropertyChanged
implementiert, warum muss ich INotifyPropertyChanged
erneut auf T
auch implementieren?
Betrachten Sie Ihre beobachtbare Sammlung als Datenquelle für eine Tabelle. Jedes Objekt aus der Sammlung belegt eine Zeile und wird in der Tabelle über mehrere Spalten hinweg angezeigt.
Die Ansicht (d. h. Ihre Tabelle) muss wissen, wann jede Zelle als Reaktion auf das Ändern der Eigenschaften von Objekten geändert werden muss, aber auch als Reaktion auf das Hinzufügen und Entfernen von Objekten in und aus der Sammlung.
Ihre beobachtbare Sammlung kümmert sich um den Umgang mit Tabellenzeilen : Sie benachrichtigt ihre Beobachter, wenn ein Objekt eingefügt, entfernt, verschoben wird und so weiter. Es fehlt jedoch das Wissen darüber, was mit einzelnen Objekten passiert, so dass es keine Hilfe im Umgang mit Tabellenspalten ist.
Hier kommen Ihre Objekte ins Spiel: Indem Sie INotifyPropertyChanged
implementieren, lassen Sie Ihre Tabelle die Daten in den Spalten verwalten.
INotifyPropertyChanged
muss von dem Objekt ausgelöst werden, dessen Eigenschaften sich ändern. ObservableCollection
kann Änderungen in den enthaltenen Objekten nicht einfach erkennen und diese in Ihrem Namen weitergeben.
Der Grund, warum die Sammlung INotifyPropertyChanged
implementiert, ist nicht besonders nützlich. Ich vermute, dass es nur ein Änderungsereignis für die Eigenschaft Count
der Sammlung auslösen wird, die sich ändern würde, wenn Elemente der Sammlung hinzugefügt / entfernt werden.
Wenn Sie nur an Elementen interessiert sind, die hinzugefügt / entfernt werden, müssen Sie diese Schnittstelle möglicherweise nicht in Ihrer Klasse implementieren. Wenn Ihre Benutzeroberfläche jedoch an Eigenschaften des Objekts gebunden ist, müssen Sie sie implementieren, wenn die Benutzeroberfläche reagieren soll.
Tags und Links .net observablecollection inotifypropertychanged