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

如何在后台线程上执行WPF筛选器?,wpf,asynchronous,filter,mvvm,Wpf,Asynchronous,Filter,Mvvm,我在WPF中使用过滤器,并且遵循建议的模式 总之,这涉及在ViewModel上公开一个文本属性,该属性表示要过滤的文本。设置属性时(通过视图中文本框的绑定),它使用CollectionViewSource.GetDefaultView(MyItems).Filter=blah过滤可见的项目列表 这非常有效,但当项目集合非常大时,问题就会出现,因为过滤是在前台线程上执行的,因此会挂起UI是否存在用于在后台线程上执行过滤的模式,以及该模式在模型视图视图模式中的适用性?不要使用CollectionVi

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

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


这非常有效,但当项目集合非常大时,问题就会出现,因为过滤是在前台线程上执行的,因此会挂起UI是否存在用于在后台线程上执行过滤的模式,以及该模式在模型视图视图模式中的适用性?

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

我使用一个我使用的类来自动实现这一点,这样就很容易将一个集合声明为另一个集合的过滤版本