An ObservableCollection
может быть обновлена UI так же, как любой коллекции. Истинная разница довольно проста:
ObservableCollection<T>
реализует INotifyCollectionChanged
, который обеспечивает уведомление, когда коллекция изменяется (как вы уже догадались ^^) Это позволяет связывающий двигатель для обновления пользовательского интерфейса, когда ObservableCollection
обновляются.
Однако BindingList<T>
реализует IBindingList
.
IBindingList
содержит уведомление об изменениях в коллекции, но не только это. Он предоставляет целую кучу функциональных возможностей, которые могут быть использованы в пользовательском интерфейсе, чтобы обеспечить гораздо больше вещей, чем только обновления пользовательского интерфейса в соответствии с изменениями, как:
- Сортировка
- Поиск
- Добавить через завод (член AddNew функция).
- Readonly список (CanEdit недвижимость)
Все эти функциональные возможности не доступны в ObservableCollection<T>
Другое отличие состоит в том, что BindingList
реле уведомления об изменениях товара, когда его элементы реализации INotifyPropertyChanged
. Если предмет поднимает событие PropertyChanged
, BindingList
получит его ListChangedEvent
с ListChangedType.ItemChanged
и OldIndex=NewIndex
(если предмет был заменен, OldIndex=-1
). ObservableCollection
не отправляет уведомления о товарах.
Обратите внимание, что в Silverlight, BindingList
не доступен в качестве опции: Однако вы можете использовать ObservableCollection
с и ICollectionView
(и IPagedCollectionView
, если я хорошо помню).
+1 для отличного ответа – Justin 2012-08-21 19:03:03
Удивительный ответ человек. Так держать. – 2014-10-11 04:34:14