ObservableCollection和BindingList之间的区别

我想知道ObservableCollectionBindingList之间的区别,因为我已经使用它们来通知Source中的任何添加/删除更改,但实际上我不知道什么时候更喜欢一个。

为什么我会选择以下其中一种?

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

要么

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

ObservableCollection可以像任何集合一样从UI更新。 真正的区别非常简单:

ObservableCollection<T>实现INotifyCollectionChanged ,它在集合发生更改时提供通知(您猜到^^)它允许绑定引擎在更新ObservableCollection时更新UI。

但是, BindingList<T>实现IBindingList

IBindingList提供收集更改的通知,但不仅如此。 它提供了一大堆功能,UI可以根据更改提供比UI更新更多的功能,例如:

  • 排序
  • 搜索
  • 通过工厂添加(AddNew成员函数)。
  • 只读列表(CanEdit属性)
  • 所有这些功能在ObservableCollection<T>中都不可用

    另一个区别是,当项目实现INotifyPropertyChanged时, BindingList中继项目更改通知。 如果一个项目提出了PropertyChanged事件,则BindingList将接收它的引发一个ListChangedEventListChangedType.ItemChangedOldIndex=NewIndex (如果项目被替换, OldIndex=-1 )。 ObservableCollection不会中继项目通知。

    请注意,在Silverlight中, BindingList不可用作为选项:但是,您可以使用ObservableCollectionICollectionView (如果我没记错的话,也可以使用IPagedCollectionView )。


    实际的区别在于BindingList用于WinForms,而ObservableCollection用于WPF。

    从WPF的角度来看,BindingList并没有得到很好的支持,除非你真的需要,否则你永远不会真的在WPF项目中使用它。


    ObservableCollectionBindingList之间的一个更大的区别 ObservableCollection BindingList ,并且可以成为该主题的出价决策因素:

    BindingList列表更改处理程序:

    绑定列表列表更改

    ObservableCollection集合更改:

    ObervableCollection集合已更改

    上面的简介:如果项目的属性在BindingList更改,则ListChanged事件将为您提供属性的完整详细信息(在PropertyDescriptor中),而ObservableCollection不会为您提供该属性。 实际上, ObservableCollection不会引发项目中更改的属性的更改事件。

    以上结论是关于在模型类中实现的INotifyPropertyChanged 。 默认情况下,如果项目中的属性发生更改,则不会引发更改的事件。

    链接地址: http://www.djcxy.com/p/21237.html

    上一篇: difference between ObservableCollection and BindingList

    下一篇: WPF styles: difference between x:Name and x:Type