我想知道ObservableCollection
和BindingList
之间的区别,因为我都曾经通知过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更新,例如:
所有这些功能在
ObservableCollection<T>
中均不可用另一个区别是
BindingList
在项目实现INotifyPropertyChanged
时中继项目更改通知。如果某个项目引发PropertyChanged
事件,则BindingList
将接收该事件,并引发一个带有ListChangedEvent
和ListChangedType.ItemChanged
的OldIndex=NewIndex
(如果替换了项目,则为OldIndex=-1
)。 ObservableCollection
不中继项目通知。请注意,在Silverlight中,不能将
BindingList
作为选项:但是,您可以使用ObservableCollection
和ICollectionView
(如果我还记得的话,也可以使用IPagedCollectionView
)。关于c# - ObservableCollection和BindingList之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4284663/