我一直在修改 MVVM 模式,现在我正在尝试基于它实现一个小应用程序。

该应用程序有一个数据网格,令人惊讶的是,其中显示了一些数据。现在我正在尝试为其添加一些分组功能。我知道如何用代码(C# 和 XAML)编写此内容,但我想知道应该将负责的代码放在哪一层。

我的一部分告诉我它应该在视图中,因为它是专门针对该特定视图的代码。它不是通用的,只有一个目的:对数据进行分组。

另一方面,我认为我应该使用命令在 ViewModel 中处理它。不过,感觉好像我正在用视图特定的逻辑污染我的视图模型。

有什么可以阐明这一点吗?

有帮助吗?

解决方案

在我的大多数应用程序。我试着分担责任是这样的:

  • 该图应该执行一个简单的 翻译的视图模型的数据 像素。通常这样的结果主要反馈非常小的代码后面。
  • 视图模型应当执行 视特定的逻辑似的分组 等等。我甚至常常有多个这个例子每图。你可以有一个主要视图模型中,暴露了一个单子-这个例子,每个组向你看例如执行分组。
  • 如果你有任何逻辑适用于 超过一个模型,它可能 域逻辑,应该进入 领域模型。

因此,我认为分组应该在模型.

其他提示

有没有一个答案。这真的取决于您的方案:

1)是否有用户对此事的任何影响?如果他们不这样做,这是固定的一组,我会发布具有IGrouping属性和使用的DataService或LINQ做它进入视图前。

这是通常小于高性能如果您在视图中的分组,但它不是一个明确的选择。如果用户可以选择很多不同的分组,这可能是一个点球值得增加的可用性支付..

如果用户对分组有一些影响,我会绑定到 集合视图 由 ViewModel 公开。该视图支持分组、过滤、排序和货币,并且 ICollectionView 接口来自 System.ComponentModel,因此您不必向 ViewModel 项目添加“gui”引用。WPF DataGrid 还支持 ICollectionView 界面。

如果用户对分组没有影响(组是固定的),我只需对模型中的数据进行“预”分组。HTH。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top