qouoww

质量管理+软件开发=聚焦管理软件的开发与应用

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

概述

BindableCollection是ObservableCollection的子类。如果您在 ViewModel 中有一个某些内容的集合,并且希望将其用作视图中某些内容的 ItemsSource/ etc(并且每当将项目添加到该集合中/从该集合中删除时,都会通知视图),则它是要使用的类。

但是,它添加了一些有用的额外功能:

  • 新增方法:AddRange,RemoveRange,Refresh
  • 线程安全

新方法

ObservableCollection缺少几个非常有用的方法:AddRange和RemoveRange 。这些几乎可以满足您的期望,允许您一次添加删除一系列元素,而无需手动迭代每个元素并调用collection.Add(element)(同时为每个添加的元素引发大量事件)。 并且AddRange和RemoveRange只会为每个添加/删除的范围引发一组事件。

Refresh是一种方便。它不会以任何方式修改集合,但会导致触发PropertyChanged 和CollectionChanged 事件,从而向任何 UI 元素指示集合已被修改,并且它们应重新加载其数据。

线程安全

线程安全是通过向 UI 线程分派所有操作(添加、删除、清除、重置等)来实现的。调度使用Execute.OnUIThreadSync,这意味着:

  • 这些操作是同步的:在操作完成之前,调用的方法不会返回。
  • 如果您已经在UI线程上,不作处理 - 在这种情况下,操作将同步执行。
  • 所有PropertyChanged事件和CollectionChanged事件始终在 UI 线程上引发。

最后一点意味着 BindableCollection上没有属性PropertyChangedDispatcher,就像 PropertyChangedBase- 事件总是在 UI 线程上引发一样,因为该属性相关的操作始终在 UI 线程上执行。同样,也没有CollectionChangedDispatcher的概念。

posted on 2022-01-13 16:16  qouoww  阅读(684)  评论(0编辑  收藏  举报