Heim > Backend-Entwicklung > C++ > Wie kann ich eine ObservableCollection erstellen, die Änderungen in ihren Elementeigenschaften überwacht?

Wie kann ich eine ObservableCollection erstellen, die Änderungen in ihren Elementeigenschaften überwacht?

Linda Hamilton
Freigeben: 2025-01-07 16:37:46
Original
713 Leute haben es durchsucht

How Can I Create an ObservableCollection That Monitors Changes in its Element Properties?

ObservableCollection zur Überwachung von Elementänderungen

Problembeschreibung

Stellen Sie sich eine ObservableCollection vor, bei der die Elemente INotifyPropertyChanged implementieren und die Sammlung selbst diese Elemente auf Änderungen überwacht. Obwohl ObservableCollection vorhanden ist, ist nicht klar, ob es bereits eine Sammlung gibt, die genau diese Anforderung erfüllt.

Lösung

ObservableCollectionEx-Klasse

Die vorgeschlagene Lösung führt ObservableCollectionEx ein, eine Erweiterung von ObservableCollection. In dieser Implementierung:

  • OnCollectionChanged: Aktualisiert Ereignisabonnements für Elemente, die hinzugefügt oder entfernt wurden.
  • ClearItems: Abmelden von Eigenschaftsänderungen eines Elements vor dem Löschen.
  • Abonnieren: Abonnieren Sie Eigenschaftsänderungen neu hinzugefügter Elemente.
  • Abmelden: Abmelden von Eigenschaftsänderungen gelöschter Elemente.
  • ContainedElementChanged: Gibt die Eigenschaftsänderungen des Elements an die Sammlung weiter.

Nutzung

ObservableCollectionEx wird wie folgt verwendet:

ObservableCollectionEx<Element> collection = new ObservableCollectionEx<Element>();
((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();
Nach dem Login kopieren

Notizen

Obwohl diese Implementierung das PropertyChanged-Ereignis der Sammlung auslöst, wenn sich die Eigenschaft eines Elements ändert, kann dies verwirrend sein. Daher kann speziell für solche Änderungen ein zusätzliches Ereignis eingeführt werden.

Darüber hinaus macht die ObservableCollection-Implementierung in BCL nur explizit die INotifyPropertyChanged-Schnittstelle verfügbar. Für das Abonnieren von Veranstaltungen ist ein Casting wie folgt erforderlich:

((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();
Nach dem Login kopieren

Beachten Sie, dass zum Abbestellen von PropertyChanged der Ereignishandler auf null gesetzt werden muss:

collection.PropertyChanged -= (s, e) => { Trace.WriteLine("Changed " + e.PropertyName); };
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine ObservableCollection erstellen, die Änderungen in ihren Elementeigenschaften überwacht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage