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

标签 .net wpf model-view-controller mvvm viewmodel

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

我们使用的是 MVVM 结构。

我的问题是,过滤列表是谁的责任? View 还是 View 模型?
我应该在 xaml.cs 中实现“OnTextChanged”事件,还是应该使用 ViewModel 中的属性并使用 PropertyChanged 过滤列表。
后续问题是,我应该在 ViewModel 中使用 BindingList/ObservableCollection,还是使用 ICollectionView 将 ItemsControl 绑定(bind)到?

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

有什么想法吗?

谢谢,
罗尔

编辑:

将它放在 ViewModel 中让我烦恼的是(在我当前的实现中)有一个引用 System.Windows.Data。这是我宁愿在 ViewModel 中没有的引用,因为它显然与 View 相关。还是我错过了什么?相关代码:

ICollectionView customerView = CollectionViewSource.GetDefaultView(customers);

最佳答案

ViewModel,毫无疑问。避免代码隐藏是该模式的最终目标——实际上,ViewModel 本身就是 View 背后的代码。

eg: different views might require different filtering



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

关于 CollectionView:可以在 View XAML 中定义 CollectionViewSource,然后将其排序和过滤属性绑定(bind)到 ViewModel。这应该在 ViewModel 和 CollectionView 中保持控制,但我相信它是过度设计的。

关于.net - MVP/MVVM - 列表过滤,谁负责?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1576817/

相关文章:

javascript - 在 Node.js 中的 Controller 中引用 Sequelize 模型

model-view-controller - MonoRail 是否已准备好进行生产使用?

c++ - 如何在非托管 C++ 应用程序中托管许可的 .Net 控件?

WPF 数据网格绑定(bind) : add new item

c# - FormattedText.FormttedText 已过时。使用 PixelsPerDip 覆盖

wpf - 构造函数中的 PropertyPath 和 PathParameters

java - 未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException 与 Spring MVC?

.net - .NET 的免费构建服务器

c# - XNA 奇怪的地形撕裂

c# - CA2000 方法使用 "using",但不使用 try/finally