我正在实现一个 WPF 应用程序,该应用程序显示一系列项,并提供通过在文本框中输入来过滤此列表的功能(我认为非常简单)。
我们使用 MVVM 结构。
我的问题是,过滤列表的责任是属于视图还是视图模型?我应该在 xaml.cs 中实现一个 "OnTextChanged" 事件,还是应该在 ViewModel 中使用属性并使用 PropertyChanged 来过滤列表。 随后的问题是,我应该在 ViewModel 中使用 BindingList/ObservableCollection,还是使用 ICollectionView 将 ItemsControl 绑定到?
我尝试了两种方法,它们都有效。将责任交给 ViewModel 可以使 View 的代码保持干净,但另一方面,我并不完全相信过滤应该由 ViewModel 负责(例如:不同的视图可能需要不同的过滤方式)
有什么想法吗?
谢谢, Roel
编辑:
让我困扰的是将其放在 ViewModel 中(在我的当前实现中),其中包含对 System.Windows.Data 的引用。我不想在 ViewModel 中有这样的引用,因为它明显与 View 相关。或者我错过了什么?相关代码:
我们使用 MVVM 结构。
我的问题是,过滤列表的责任是属于视图还是视图模型?我应该在 xaml.cs 中实现一个 "OnTextChanged" 事件,还是应该在 ViewModel 中使用属性并使用 PropertyChanged 来过滤列表。 随后的问题是,我应该在 ViewModel 中使用 BindingList/ObservableCollection,还是使用 ICollectionView 将 ItemsControl 绑定到?
我尝试了两种方法,它们都有效。将责任交给 ViewModel 可以使 View 的代码保持干净,但另一方面,我并不完全相信过滤应该由 ViewModel 负责(例如:不同的视图可能需要不同的过滤方式)
有什么想法吗?
谢谢, Roel
编辑:
让我困扰的是将其放在 ViewModel 中(在我的当前实现中),其中包含对 System.Windows.Data 的引用。我不想在 ViewModel 中有这样的引用,因为它明显与 View 相关。或者我错过了什么?相关代码:
ICollectionView customerView = CollectionViewSource.GetDefaultView(customers);
System.Windows.Data
。 - pauldoo