如何在后台线程上执行WPF筛选器?

3

我正在使用WPF中的过滤器,并且遵循这里建议的模式。

总结一下,这涉及在ViewModel上公开一个文本属性,该属性表示要过滤的文本。当属性被设置(由视图中文本框的绑定设置)时,它使用CollectionViewSource.GetDefaultView(MyItems).Filter = blah来过滤可见的项目列表。

这个方法非常好用,但是当项目集合非常大时就会出现问题,因为过滤是在前台线程上执行的,从而导致UI挂起。是否存在在后台线程上执行过滤的模式,以及这如何符合Model-View-ViewModel设计模式?

1个回答

4

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

我使用的是一个自动化了此过程的类,因此只需声明一个集合即可成为另一个集合的过滤版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接