Muss ich bei der Verwendung von ObservableCollectionT trotzdem INotifyPropertyChanged für den Typ T implementieren?

8

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?

    
rajibdotnet 24.04.2012, 03:23
quelle

2 Antworten

7

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.

    
dasblinkenlight 24.04.2012, 03:35
quelle
3

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.

    
Josh 24.04.2012 03:35
quelle