我想知道ObservableCollectionBindingList之间的区别,因为我都曾经通知过Source中的任何添加/删除更改,但实际上我不知道何时首选一个。

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

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

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

最佳答案

可以从UI完全像任何集合一样更新ObservableCollection。真正的区别非常简单:
ObservableCollection<T>实现INotifyCollectionChanged,当集合更改时(您猜到^^),它会提供通知
ObservableCollection更新时,它允许绑定(bind)引擎更新UI。

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

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

  • 所有这些功能在ObservableCollection<T>中均不可用

    另一个区别是BindingList在项目实现INotifyPropertyChanged时中继项目更改通知。如果某个项目引发PropertyChanged事件,则BindingList将接收该事件,并引发一个带有ListChangedEventListChangedType.ItemChangedOldIndex=NewIndex(如果替换了项目,则为OldIndex=-1)。 ObservableCollection不中继项目通知。

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

    关于c# - ObservableCollection和BindingList之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4284663/

    10-11 07:31