一尘不染

ObservableCollection和BindingList之间的区别

c#

我想知道和之间的区别ObservableCollectionBindingList因为我都曾用两者来通知Source中的任何添加/删除更改,但实际上我不知道何时比另一个更喜欢一个。

为什么我要选择以下一项?

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

要么

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

阅读 842

收藏
2020-05-19

共1个答案

一尘不染

一个ObservableCollection可以从用户界面酷似任何集合进行更新。真正的区别非常简单:

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

但是,BindingList<T>工具IBindingList

IBindingList提供有关集合更改的通知,但不仅限于此。它提供了一整套功能,UI可以使用这些功能提供很多功能,而不仅仅是根据更改进行UI更新,例如:

  • 排序
  • 正在搜寻
  • 通过工厂添加(AddNew成员函数)。
  • 只读列表(CanEdit属性)

所有这些功能在 ObservableCollection<T>

另一个区别是,BindingList在实现项目更改时,中继项目更改通知INotifyPropertyChanged。如果某件物品引发了一个PropertyChanged事件,则BindingList它将收到一个ListChangedEvent带有ListChangedType.ItemChanged和的凸起物OldIndex=NewIndex(如果替换了一件物品,OldIndex=-1)。ObservableCollection不中继项目通知。

请注意,在Silverlight中,BindingList不是可选选项:但是,您可以使用ObservableCollections和ICollectionView(并且IPagedCollectionView我记得很好)。

2020-05-19