小编典典

ObservableCollection 和 BindingList 的区别

all

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

为什么我会选择以下其中一项而不是另一项?

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

或者

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

阅读 216

收藏
2022-05-20

共1个答案

小编典典

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

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
ICollectionViewIPagedCollectionView如果我没记错的话)。

2022-05-20