MVVM是哪个模式的一部分负责datagrid的分组

时间:2010-06-11 08:11:48

标签: c# wpf mvvm separation-of-concerns responsibility

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

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

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

另一方面,我认为我应该使用命令在ViewModel中处理它。但是,感觉好像我用View特定的逻辑污染了我的ViewModel。

任何可以脱掉的韧带?

3 个答案:

答案 0 :(得分:7)

在我的大多数MVVM应用程序中,我尝试分担这样的责任:

  • 视图应该只是执行一个简单的操作 将viewmodel数据转换为 像素。通常这会导致大部分XAML和非常少的代码。
  • viewmodel应该执行 视图特定的逻辑,如分组 我经常甚至每个视图都有多个视图模型。您可以拥有一个主视图模型,该视图模型将每个组的子视图模型列表公开给您的视图,例如,以实现分组。
  • 如果您有任何适用的逻辑 它可能不止一个viewmodel 域逻辑应该进入 域模型。

所以我认为分组应该放在viewmodel中。

答案 1 :(得分:0)

对此没有一个答案。这实际上取决于你的情况:

1)用户是否对此事有任何影响?如果它们没有,并且它是一个固定的分组,我会发布一个带有IGrouping的属性,并在它进入视图之前使用dataservice或LINQ来进行。

如果您在视图中进行分组,通常效果较差,但这不是一个明确的选择。如果用户可以选择许多不同的分组,这可能是一个值得为增加的可用性支付的惩罚..

答案 2 :(得分:0)

如果用户对分组有一些影响,我将绑定到ViewModel公开的ICollectionView。该视图支持分组,过滤,排序和货币,ICollectionView接口来自System.ComponentModel,因此您不必为ViewModel项目添加“gui”引用。 WPF DataGrid也支持ICollectionView接口。

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