我正在实现一个显示项目列表的 wpf 应用程序,并提供通过在文本框中键入来过滤此列表的功能(我认为这是非常微不足道的用例)。
我们使用的是 MVVM 结构。
我的问题是,过滤列表是谁的责任?视图还是视图模型?我应该在 xaml.cs 中实现“OnTextChanged”事件,还是应该使用 ViewModel 中的属性并使用 PropertyChanged 过滤列表。
后续问题是,我应该在 ViewModel 中使用 BindingList/ObservableCollection,还是使用 ICollectionView 将 ItemsControl 绑定到?
我尝试了这两种方法,它们都有效。赋予 ViewModel 责任使 View 后面的代码保持空白,但另一方面,我并不完全相信应用过滤是 ViewModel 的责任(例如:不同的视图可能需要不同的过滤)
有什么想法吗?
谢谢,罗尔
编辑:
将它放在 ViewModel 中困扰我的是(在我当前的实现中)有一个引用 System.Windows.Data。这是我宁愿在 ViewModel 中没有的参考,因为它显然与 View 相关。还是我错过了什么?相关代码:
ICollectionView customerView = CollectionViewSource.GetDefaultView(customers);