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эта опция недоступна: однако вы можете использовать ObservableCollections и ICollectionView(и, IPagedCollectionViewесли я хорошо помню).