如何在后台线程上执行WPF过滤器?

时间:2010-06-04 14:35:27

标签: wpf asynchronous filter mvvm

我在WPF中使用过滤器,并且我遵循建议的模式here

总而言之,这涉及在ViewModel上公开的文本属性,该属性表示要过滤的文本。设置属性后(通过视图中文本框的绑定),使用CollectionViewSource.GetDefaultView(MyItems).Filter = blah过滤可见的项目列表。

这很好用,但是当项目集合非常大时会出现问题,因为过滤是在前台线程上执行的,因此会挂起UI。 是否存在用于在后台线程上执行过滤的模式,以及它如何适合Model-View-ViewModel模式?

1 个答案:

答案 0 :(得分:4)

不要使用CollectionView进行过滤,而是自己动手:在ViewModel中创建一个包含过滤数据的属性和一个用于保存过滤器的属性。每当更改过滤器时,在单独的线程中触发工作项以计算新的过滤数据属性,然后在完成后更新该属性。更新属性时,请更新现有集合或根据已进行的更改进行替换。

我使用的是一个自动化的类,因此它就像声明一个集合是另一个集合的过滤版本一样简单。