"ObservableCollection与BindingList的区别

19 浏览
0 Comments

"ObservableCollection与BindingList的区别

我想知道ObservableCollectionBindingList之间的区别,因为我都使用它们来通知源中的任何添加/删除更改,但我实际上不知道何时使用其中一个。

为什么会选择以下之一而不是另一个?

ObservableCollection lstEmp = new ObservableCollection();

BindingList lstEmp = new BindingList();

admin 更改状态以发布 2023年5月21日
0
0 Comments

实际上的区别是BindingList是为WinForms设计的,而ObservableCollection是为WPF设计的。

从WPF的角度来看,BindingList得不到适当的支持,在WPF项目中您实际上会很少使用它,除非您真的必须这样做。

0
0 Comments

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

ObservableCollection实现了INotifyCollectionChanged,提供集合发生变化时的通知(你猜对了^^)
ObservableCollection被更新时,它允许绑定引擎更新UI。

然而,BindingList实现了IBindingList

IBindingList提供了关于集合更改的通知,但不仅如此。它提供了一整套功能,可以被UI用来提供更多的东西,而不仅仅是根据更改更新UI,例如:

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

所有这些功能在ObservableCollection中都不可用。

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

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

0