C#/Stylet--->BindableCollection、ObservableCollection

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),则使用该类。
附加的功能

  1. AddRangeRemoveRangeRefresh方法
    AddRangeRemoveRange允许一次添加一个删除一系列元素,而不必手动遍历每个元素collection.Add(element)(同时为添加的每个元素引发大量事件)。AddRange和RemoveRange只会在每个添加/删除的范围内引发一组事件。
    Refresh不会以任何方式修改集合,但是会触发PropertyChanged和CollectionChanged事件,从而向任何UI元素指示集合已被修改,并且他们应该重新加载其数据。
  2. 是线程安全的
    通过将所有操作(添加、删除、清除、重置等)分派到UI线程来实现线程安全

ObservableCollection

定义

ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged

表示一个动态集合,在添加项,移除项或刷新整个列表时,此集合将提供通知。

使用场景

在许多情况下,所使用的数据是对象的集合.例如,数据绑定中的一个常见方案是使用ItemsControl(如ListBox,ListView或TreeView)来显示记录的集合.
可以枚举实现 IEnumerable 接口的任何集合。 但是,若要设置动态绑定,以便集合中的插入或删除操作可以自动更新 UI,则该集合必须实现INotifyCollectionChanged接口。 此接口公开CollectionChanged事件,只要基础集合发生更改,都应该引发该事件。
WPF 提供 ObservableCollection 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。
还有许多情况,我们所使用的数据只是单纯的字段或者属性,此时我们需要为这些字段或属性实现INotifyPropertyChanged接口实现了该接口,只要字段或属性的发生了改变,就会提供通知机制


参考

CSDN

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值