5

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

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

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

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

有什么可以解决的吗?

4

3 回答 3

7

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

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

所以我认为分组应该放在视图模型中。

于 2010-06-11T08:25:08.767 回答
0

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

1) 用户对此事有影响吗?如果他们不这样做,并且这是一个固定的分组,我会发布一个带有 IGrouping 的属性,并在它进入视图之前使用数据服务或 LINQ 来完成它。

如果您在视图中进行分组,它的性能通常会降低,但这不是一个明确的选择。如果用户可以选择很多不同的分组,这可能是值得为增加的可用性付出的代价。

于 2010-06-11T08:25:20.723 回答
0

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

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

于 2010-07-09T20:48:19.140 回答