6

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

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

  • 当视图抛出 ChangedFocus 或 SaveButtonPressed 事件等时,验证仅由 ViewModel 处理。

  • 模型非常愚蠢,只是基于数据库中的一个或多个表的数据结构,但模型本身不处理验证,例如。甚至是 ViewModel 建立并持有对象的 ObservableCollection,例如“客户”,而不是模型本身。

任何反馈表示赞赏。

4

3 回答 3

6

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

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

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

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

验证仅由 ViewModel 处理

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

模型很笨

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

于 2009-04-07T15:06:56.930 回答
3

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

于 2009-04-08T05:43:17.230 回答
1

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

皮肤应用程序可以利用这种能力。

模型非常愚蠢,但模型本身不处理验证

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

于 2009-04-07T11:23:14.033 回答