ObservableCollection
может обновляться из пользовательского интерфейса точно так же, как любая коллекция.Истинная разница довольно проста:
ObservableCollection<T>
реализует INotifyCollectionChanged
, который предоставляет уведомление при изменении коллекции (как вы уже догадались ^^). Он позволяет механизму привязки обновлять пользовательский интерфейс при обновлении ObservableCollection
.
Однако BindingList<T>
реализует IBindingList
.
IBindingList
предоставляет уведомление об изменениях в коллекции, но не только.Он предоставляет целый набор функциональных возможностей, которые могут использоваться пользовательским интерфейсом для предоставления гораздо большего, чем только обновления пользовательского интерфейса в соответствии с изменениями, например:
- сортировка
- поиск
- Добавить через фабрику (функция-член AddNew).
- Список только для чтения (свойство CanEdit)
Все эти функции недоступны в ObservableCollection<T>
ДругойРазница в том, что BindingList
ретранслирует уведомления об изменении предмета, когда его предмет реализует INotifyPropertyChanged
.Если предмет вызывает событие PropertyChanged
, BindingList
получит его, а рейз ListChangedEvent
с ListChangedType.ItemChanged
и OldIndex=NewIndex
(если предмет был заменен, OldIndex=-1
).ObservableCollection
не передает уведомления об элементах.
Обратите внимание, что в Silverlight BindingList
недоступно в качестве опции: однако вы можете использовать ObservableCollection
s и ICollectionView
(и IPagedCollectionView
, если яхорошо помню).