Разница между 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
не доступен в качестве опции: однако вы можете использоватьObservableCollection
s иICollectionView
(иIPagedCollectionView
если я правильно помню).
практическая разница заключается в том, что BindingList предназначен для WinForms, а ObservableCollection-для WPF.
с точки зрения WPF, BindingList не поддерживается должным образом, и вы никогда не будете использовать его в проекте WPF, если вам действительно не нужно.
Еще Один большая разница между
ObservableCollection
иBindingList
это удобно, и может быть фактором решения ставки по теме:
BindingList
Обработчик Изменений Списка:
ObservableCollection
коллекция изменения:краткое изложение выше: если свойство элемента изменяется в
BindingList
наListChanged
мероприятие даст вам полную информацию собственности(в PropertyDescriptor) иObservableCollection
Не дам тебе этого. ФактическиObservableCollection
не поднять событие изменения свойства изменено в элементе.выше заключение в отношении
INotifyPropertyChanged
реализовано в модели классов. По умолчанию none вызывает событие changed, если свойство изменяется в элементе.