Ein ObservableCollectionkann über die Benutzeroberfläche genau wie jede Sammlung aktualisiert werden. Der wahre Unterschied ist ziemlich einfach:
ObservableCollection<T>implementiert, INotifyCollectionChangeddas eine Benachrichtigung bereitstellt, wenn die Sammlung geändert wird (Sie haben es erraten ^^). Es ermöglicht der Bindungs-Engine, die Benutzeroberfläche zu aktualisieren, wenn die ObservableCollectionaktualisiert wird.
Allerdings BindingList<T>implementiert IBindingList.
IBindingListbietet Benachrichtigung über Sammlungsänderungen, aber nicht nur das. Es bietet eine ganze Reihe von Funktionen, die von der Benutzeroberfläche verwendet werden können, um viel mehr Dinge als nur Aktualisierungen der Benutzeroberfläche gemäß Änderungen bereitzustellen, wie z.
- Sortierung
- Suchen
- Werkseitig hinzufügen (AddNew-Mitgliedsfunktion).
- Schreibgeschützte Liste (CanEdit-Eigenschaft)
Alle diese Funktionen sind in nicht verfügbar ObservableCollection<T>
Ein weiterer Unterschied besteht darin, dass BindingListBenachrichtigungen über Elementänderungen weitergeleitet werden, wenn die Elemente implementiert werden INotifyPropertyChanged. Wenn ein Gegenstand ein PropertyChangedEreignis BindingListauslöst, erhält er einen ListChangedEventmit ListChangedType.ItemChangedund OldIndex=NewIndex(wenn ein Gegenstand ersetzt wurde OldIndex=-1). ObservableCollectionleitet keine Artikelbenachrichtigungen weiter.
Beachten Sie, dass in Silverlight BindingListnicht als Option verfügbar ist: Sie können jedoch ObservableCollections und verwenden ICollectionView(und IPagedCollectionViewwenn ich mich gut erinnere).