BindableCollection
定义
BindableCollection<T> : ObservableCollection<T>, IObservableCollection<T>, IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, INotifyPropertyChanged, INotifyCollectionChanged, IReadOnlyObservableCollection<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, INotifyCollectionChanging
BindableCollection是ObservableCollection的子类。
使用场景
如果在viewmodel中有一个东西的集合,并且想将它用作ItemsSource在View中的东西(并且在将项目添加到该集合中或从该集合中删除时,都会通知View),则使用该类。
附加的功能
AddRange
,RemoveRange
和Refresh
方法
AddRange
和RemoveRange
允许一次添加一个删除一系列元素,而不必手动遍历每个元素collection.Add(element)(同时为添加的每个元素引发大量事件)。AddRange和RemoveRange只会在每个添加/删除的范围内引发一组事件。
Refresh
不会以任何方式修改集合,但是会触发PropertyChanged和CollectionChanged事件,从而向任何UI元素指示集合已被修改,并且他们应该重新加载其数据。- 是线程安全的
通过将所有操作(添加、删除、清除、重置等)分派到UI线程来实现线程安全
ObservableCollection
定义
ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged
表示一个动态集合,在添加项,移除项或刷新整个列表时,此集合将提供通知。
使用场景
在许多情况下,所使用的数据是对象的集合.例如,数据绑定中的一个常见方案是使用ItemsControl(如ListBox,ListView或TreeView)来显示记录的集合.
可以枚举实现 IEnumerable 接口的任何集合。 但是,若要设置动态绑定,以便集合中的插入或删除操作可以自动更新 UI,则该集合必须实现INotifyCollectionChanged
接口。 此接口公开CollectionChanged
事件,只要基础集合发生更改,都应该引发该事件。
WPF 提供 ObservableCollection 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。
还有许多情况,我们所使用的数据只是单纯的字段或者属性,此时我们需要为这些字段或属性实现INotifyPropertyChanged接口,实现了该接口,只要字段或属性的发生了改变,就会提供通知机制。
参考
【CSDN】