我在WPF中使用过滤器,并且我遵循建议的模式here。
总而言之,这涉及在ViewModel上公开的文本属性,该属性表示要过滤的文本。设置属性后(通过视图中文本框的绑定),使用CollectionViewSource.GetDefaultView(MyItems).Filter = blah
过滤可见的项目列表。
这很好用,但是当项目集合非常大时会出现问题,因为过滤是在前台线程上执行的,因此会挂起UI。 是否存在用于在后台线程上执行过滤的模式,以及它如何适合Model-View-ViewModel模式?
答案 0 :(得分:4)
不要使用CollectionView进行过滤,而是自己动手:在ViewModel中创建一个包含过滤数据的属性和一个用于保存过滤器的属性。每当更改过滤器时,在单独的线程中触发工作项以计算新的过滤数据属性,然后在完成后更新该属性。更新属性时,请更新现有集合或根据已进行的更改进行替换。
我使用的是一个自动化的类,因此它就像声明一个集合是另一个集合的过滤版本一样简单。