Ich habe eine Wrapper-Auflistung für ObservableCollection erstellt, die jedes Item-PropertyChanged-Ereignis abonniert und es als eigenes Ereignis ItemPropertyChanged erneut absetzt. Ich tat dies mit einer ähnlichen Methode wie ich beschrieben here. Gibt es einen besseren Weg? Fehle ich eine andere .NET-Sammlung, die bereits diese Art von Verhalten aufweist?Hören Sie sich das PropertyChanged-Ereignis eines beliebigen Objekts in einer ObservableCollection an <INotifyPropertyChanged>
Antwort
Es gab bereits einen Beitrag über Stackoverflow. Es bietet auch eine schnelle Implementierung eines neuen Sammlertyps, der ein Ereignis verfügbar macht, um dies zum Laufen zu bringen.
siehe Link: ObservableCollection that also monitors changes on the elements in collection
Einverstanden, ich war auf der Suche nach einem "besseren" Weg, als jedes Kind in der Sammlung zu abonnieren. – chilltemp
Ich gehe davon aus, dass Sie dieses Ereignis, um feuern ein Aggregat zu berechnen. Ich habe eine andere Lösung für dieses Problem. Erwägen Sie die Verwendung von Update Controls with linq. Sie können Ihr Aggregat mit linq deklarativ beschreiben, und Update Controls wird seine Abhängigkeiten innerhalb Ihrer Sammlung verfolgen. Wenn sich die Sammlung ändert oder sich eine der referenzierten Eigenschaften ändert, wird das Aggregat erneut bewertet.
Verwenden Sie stattdessen System.ComponentModel.BindingList<T>
. Das Ereignis ListChanged
wird ausgelöst, wenn ein Element in der Liste den Wert INotifyPropertyChanged
auslöst.
Das sieht so aus, als könnte es ziemlich teuer sein, wenn man zum Beispiel eine sehr große Sammlung baut. Ich würde mir wünschen, dass es eine bessere Option gibt. – kbrimington
Es gibt keinen, den ich gesehen habe. – bporter
Welchen Zweck hat es, ein eigenes Ereignis zu erstellen, anstatt die Standardschnittstelle INotifyPropertyChanged/ICollectionChanged zu verwenden? – Goblin