2010-06-04 44 views
2

我在WPF中使用过滤器,我遵循建议的模式here。总之,这涉及在ViewModel上暴露的文本属性,该文本属性表示要过滤的文本。当属性被设置时(通过视图中文本框的绑定),它使用CollectionViewSource.GetDefaultView(MyItems).Filter = blah过滤可见的项目列表。如何在后台线程上执行WPF过滤器?

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

回答

4

而不是使用的CollectionView过滤的,做你自己:在你的视图模型创建一个包含过滤后的数据,一个用于保持过滤器的属性。每当过滤器发生变化时,在单独的线程中启动工作项以计算新的过滤数据属性,然后在完成时更新该属性。在更新属性时,可以更新现有的集合,也可以根据进行的更改进行替换。

我使用了一个类来自动执行此操作,因此它很容易将一个集合声明为另一个集合的过滤版本。

相关问题