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