我在 WPF 中使用过滤器并且遵循建议的模式here http://www.japf.fr/2009/02/very-simple-mvvm-demo-application/.
总而言之,这涉及在 ViewModel 上公开一个文本属性,该属性表示要过滤的文本。设置属性时(通过视图中文本框的绑定),它使用CollectionViewSource.GetDefaultView(MyItems).Filter = blah
过滤可见的项目列表。
这很有效,但当项目集合非常大时就会出现问题,因为过滤是在前台线程上执行的,因此会挂起 UI。是否存在在后台线程上执行过滤的模式,以及它如何适合模型-视图-视图模型模式?
不要使用 CollectionView 进行过滤,而是自己进行操作:在 ViewModel 中创建一个包含过滤数据的属性和一个用于保存过滤器的属性。每当更改过滤器时,都会在单独的线程中启动一个工作项来计算新的过滤数据属性,然后在完成后更新该属性。更新属性时,更新现有集合或替换它,具体取决于所做的更改数量。
我使用一个类来自动执行此操作,因此就像将一个集合声明为另一个集合的过滤版本一样简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)