An 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
если я хорошо помню).