Разница между ObservableCollection и BindingList


Я хочу знать разницу между ObservableCollection и BindingList потому что я использовал оба для уведомления о любых изменениях добавления/удаления в источнике, но я на самом деле не знаю, когда предпочтительнее один над другим.

Почему я должен выбрать один из следующих вариантов?

ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();

или

BindingList<Employee> lstEmp = new BindingList<Employee>();
3 212

3 ответа:

An ObservableCollection может быть обновлен из пользовательского интерфейса точно так же, как любая коллекция. Истинная разница довольно проста:

ObservableCollection<T> осуществляет INotifyCollectionChanged который обеспечивает уведомление, когда коллекция изменяется (вы догадались ^^) Это позволяет механизму привязки обновлять пользовательский интерфейс, когда ObservableCollection обновляется.

, BindingList<T> осуществляет IBindingList.

IBindingList обеспечивает уведомление об изменениях коллекции, но не только это. Это обеспечивает целую кучу функциональности, которая может быть использована пользовательским интерфейсом, чтобы обеспечить гораздо больше вещей, чем только обновления пользовательского интерфейса в соответствии с изменениями, такими как:

  • сортировка
  • Поиск
  • добавить через завод (функция-член AddNew).
  • список только для чтения (свойство CanEdit)

все эти функции недоступны в ObservableCollection<T>

еще одно отличие в том, что BindingList реле уведомления об изменении элемента, когда его элементы реализовать INotifyPropertyChanged. Если элемент вызывает PropertyChanged мероприятия BindingList получит его поднимает a ListChangedEvent С ListChangedType.ItemChanged и OldIndex=NewIndex (если элемент был заменен,OldIndex=-1). ObservableCollection не передает уведомления элемента.

обратите внимание, что в Silverlight, BindingList не доступен в качестве опции: однако вы можете использовать ObservableCollections и ICollectionViewIPagedCollectionView если я правильно помню).

практическая разница заключается в том, что BindingList предназначен для WinForms, а ObservableCollection-для WPF.

с точки зрения WPF, BindingList не поддерживается должным образом, и вы никогда не будете использовать его в проекте WPF, если вам действительно не нужно.

Еще Один большая разница между ObservableCollection и BindingList это удобно, и может быть фактором решения ставки по теме:

BindingList Обработчик Изменений Списка:

BindingList List Change

ObservableCollection коллекция изменения:

ObervableCollection Collection Changed

краткое изложение выше: если свойство элемента изменяется в BindingList на ListChanged мероприятие даст вам полную информацию собственности(в PropertyDescriptor) и ObservableCollection Не дам тебе этого. Фактически ObservableCollection не поднять событие изменения свойства изменено в элементе.

выше заключение в отношении INotifyPropertyChanged реализовано в модели классов. По умолчанию none вызывает событие changed, если свойство изменяется в элементе.