MVP/MVVM - 过滤列表,谁负责?

Roe*_*elF 10 .net wpf model-view-controller mvvm viewmodel

我正在实现一个显示项目列表的wpf应用程序,并提供通过键入文本框来过滤此列表的功能(我认为这是非常简单的用例).

我们正在使用MVVM结构.

我的问题是,谁负责过滤清单?视图还是视图模型?我应该在xaml.cs中实现"OnTextChanged"事件,还是应该在ViewModel中使用属性并使用PropertyChanged来过滤列表.
后续问题是,我应该在ViewModel中使用BindingList/ObservableCollection,还是使用ICollectionView将ItemsControl绑定到?

我尝试了两种方法,但它们都有效.赋予ViewModel责任使得View从代码中保持空白,但另一方面,我并不完全相信应用过滤是ViewModels的责任(例如:不同的视图可能需要不同的过滤)

有什么想法吗?

谢谢,罗尔

编辑:

把它放在ViewModel中让我困扰的是(在我当前的实现中)有一个System.Windows.Data的引用.这是我在ViewModel中没有的参考,因为它显然与View相关.或者我错过了什么?相关代码:

ICollectionView customerView = CollectionViewSource.GetDefaultView(customers);
Run Code Online (Sandbox Code Playgroud)

ima*_*ima 6

ViewModel,毫无疑问.避免代码隐藏是模式的最终目标 - 实际上,ViewModel本身就是代码隐藏视图.

例如:不同的视图可能需要不同的过滤

不同的视图应该有不同的ViewModel.ViewModel基本上是一种(更多)面向对象的代码隐藏文件方法.

关于CollectionView:您可以在视图XAML中定义CollectionViewSource,然后将其排序和过滤属性绑定到ViewModel.这应该在ViewModel和CollectionView中保持控制,但我相信它是过度工程的.