Ein ObservableCollection
kann über die Benutzeroberfläche genau wie jede Sammlung aktualisiert werden. Der wahre Unterschied ist ziemlich einfach:
ObservableCollection<T>
implementiert, INotifyCollectionChanged
das 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 ObservableCollection
aktualisiert wird.
Allerdings BindingList<T>
implementiert IBindingList
.
IBindingList
bietet 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 BindingList
Benachrichtigungen über Elementänderungen weitergeleitet werden, wenn die Elemente implementiert werden INotifyPropertyChanged
. Wenn ein Gegenstand ein PropertyChanged
Ereignis BindingList
auslöst, erhält er einen ListChangedEvent
mit ListChangedType.ItemChanged
und OldIndex=NewIndex
(wenn ein Gegenstand ersetzt wurde OldIndex=-1
). ObservableCollection
leitet keine Artikelbenachrichtigungen weiter.
Beachten Sie, dass in Silverlight BindingList
nicht als Option verfügbar ist: Sie können jedoch ObservableCollection
s und verwenden ICollectionView
(und IPagedCollectionView
wenn ich mich gut erinnere).