Разница между ObservableCollection и BindingList
Я хочу знать разницу между ObservableCollection и BindingList потому что я использовал оба для уведомления о любых изменениях добавления/удаления в источнике, но я на самом деле не знаю, когда предпочтительнее один над другим.
Почему я должен выбрать один из следующих вариантов?
ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();
или
BindingList<Employee> lstEmp = new BindingList<Employee>();
3 ответа:
An
ObservableCollectionможет быть обновлен из пользовательского интерфейса точно так же, как любая коллекция. Истинная разница довольно проста:,
ObservableCollection<T>осуществляетINotifyCollectionChangedкоторый обеспечивает уведомление, когда коллекция изменяется (вы догадались ^^) Это позволяет механизму привязки обновлять пользовательский интерфейс, когдаObservableCollectionобновляется.BindingList<T>осуществляетIBindingList.
IBindingListобеспечивает уведомление об изменениях коллекции, но не только это. Это обеспечивает целую кучу функциональности, которая может быть использована пользовательским интерфейсом, чтобы обеспечить гораздо больше вещей, чем только обновления пользовательского интерфейса в соответствии с изменениями, такими как:
- сортировка
- Поиск
- добавить через завод (функция-член AddNew).
- список только для чтения (свойство CanEdit)
все эти функции недоступны в
ObservableCollection<T>еще одно отличие в том, что
BindingListреле уведомления об изменении элемента, когда его элементы реализоватьINotifyPropertyChanged. Если элемент вызываетPropertyChangedмероприятияBindingListполучит его поднимает aListChangedEventСListChangedType.ItemChangedиOldIndex=NewIndex(если элемент был заменен,OldIndex=-1).ObservableCollectionне передает уведомления элемента.обратите внимание, что в Silverlight,
BindingListне доступен в качестве опции: однако вы можете использоватьObservableCollections иICollectionView(иIPagedCollectionViewесли я правильно помню).
практическая разница заключается в том, что BindingList предназначен для WinForms, а ObservableCollection-для WPF.
с точки зрения WPF, BindingList не поддерживается должным образом, и вы никогда не будете использовать его в проекте WPF, если вам действительно не нужно.
Еще Один большая разница между
ObservableCollectionиBindingListэто удобно, и может быть фактором решения ставки по теме:
BindingListОбработчик Изменений Списка:
ObservableCollectionколлекция изменения:краткое изложение выше: если свойство элемента изменяется в
BindingListнаListChangedмероприятие даст вам полную информацию собственности(в PropertyDescriptor) иObservableCollectionНе дам тебе этого. ФактическиObservableCollectionне поднять событие изменения свойства изменено в элементе.выше заключение в отношении
INotifyPropertyChangedреализовано в модели классов. По умолчанию none вызывает событие changed, если свойство изменяется в элементе.

