【问题标题】:ViewModel/View relationship and validationViewModel/View 关系和验证
【发布时间】:2009-04-07 11:20:20
【问题描述】:

在我们的 WPF 应用程序中,我们希望使用基本的 MVVM 模式。我们正在讨论它,出现了一些关于 ViewModel/View 关系和验证的不确定性。你说下面是不是很好理解呢?

  • 每个 View 都有一个且只有一个 ViewModel ViewModel 的目的是 为其视图提供数据和 处理其所有视图的事件和 命令。 (是否存在一个 ViewModel 服务两个 View 的情况,例如一个标准 XAML 输入表单视图和一个 CSV 导入,它提供与表单相同的数据,因此需要进行相同的验证?)

  • 验证仅由 ViewModel 处理,例如风景 引发 ChangedFocus 或 SaveButtonPressed 事件等。

  • 模型很笨,简直就是 基于一个或一个的数据结构 来自数据库的更多表,但是 模型本身无法处理 验证,例如。甚至是 ViewModel 构建并保存对象的 ObservableCollection,例如“客户”而不是模型本身。

感谢任何反馈。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    每个 View 都有一个且只有一个 ViewModel

    我认为,如果您严格遵守模式,那么每个视图将只有一个 ViewModel。我们的应用程序中有一个案例,其中需求在中途发生变化,最容易让 View 引用两个不同的 ViewModel。根据您实现模式的方式,这可能会也可能不会。

    是否存在一个 ViewModel 服务两个 View 的情况

    是的,这是该模式的优点之一。

    验证仅由 ViewModel 处理

    不一定。我们选择让我们的模型类实现 IDataErrorInfo 并自己进行验证。这确保了无论在哪里使用 Model 类,验证都是相同的。如果验证需要更改,它只在一个地方。

    这个模型很笨

    它只是像你想要的那样愚蠢。如果您愿意,您可以在模型中包含验证和业务规则。

    【讨论】:

      【解决方案2】:

      我同意上面所说的一切。只有一条评论:您的视图模型可以在内部使用另一个视图模型。使用这种方法,您可以将视图划分为几个区域,这些区域由不同的视图模型提供服务。只需使用 ContentPresenter,将其绑定到所需的视图模型属性(获取所需的视图模型)并使用 DataTemplate 将所需的视图与您的视图模型相关联。

      【讨论】:

      • 是的,我在许多示例中都看到了这一点,其中 ViewModel 中有一组 ViewModel,很好的提醒,谢谢
      【解决方案3】:

      是否存在一个 ViewModel 服务两个 View 的情况

      皮肤应用程序可以利用此功能。

      模型很笨 但模型本身不处理验证

      模型可以随心所欲。它可以包含“验证”以确保完整性,但该验证不会包含 UI 中显示的消息。

      【讨论】:

        猜你喜欢
        • 2010-10-21
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        相关资源
        最近更新 更多