【问题标题】:MVVM what part of pattern responsible for grouping of datagridMVVM 模式的哪一部分负责对数据网格进行分组
【发布时间】:2010-06-11 08:11:47
【问题描述】:

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

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

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

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

有什么可以解决的吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • +1 我认为 VM 也是如此... 另一点是可测试性 - 您希望在不需要实例化视图的情况下测试分组逻辑
    • @IanR 我怎么会忘记可测试性的角度? :-) 好点。
    • @IanR 我怎么会忘记可测试性的角度? :-) 好点 ;)
    【解决方案2】:

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

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

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

    【讨论】:

    • 用户有,这是一个测试用例,用于检查 WPF 在我们的下一个大项目中的适用性。在这种情况下,用户可以完全控制数据网格。分组、排序和过滤应最大限度地由用户自定义。
    • 好的 - 那么您可能想查看 XCeed 的数据网格 (xceed.com/Grid_WPF_Intro.html) 或 Infragistics 数据网格 (infragistics.com/dotnet/netadvantage/wpf/… 他们内置了对这类东西的支持。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      相关资源
      最近更新 更多