Wpf 视图模型/视图关系和验证

Wpf 视图模型/视图关系和验证,wpf,mvvm,Wpf,Mvvm,在我们的WPF应用程序中,我们希望使用基本的MVVM模式。我们在讨论它时,发现了一些关于视图模型/视图关系和验证的不确定性。你会说下面是一个很好的理解吗 每个视图都有且只有一个ViewModel 而ViewModel的用途是 为其视图提供数据和 处理其视图的所有事件和 命令。(是否存在一个ViewModel服务于两个视图的实例,例如标准XAML输入表单视图和CSV导入,后者提供与表单相同的数据,因此需要进行相同的验证?) 验证仅由ViewModel处理,例如视图 抛出ChangedFocus或

在我们的WPF应用程序中,我们希望使用基本的MVVM模式。我们在讨论它时,发现了一些关于视图模型/视图关系和验证的不确定性。你会说下面是一个很好的理解吗

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

  • 验证仅由ViewModel处理,例如视图 抛出ChangedFocus或SaveButtonPressed事件等

  • 这个模型相当愚蠢,只是 基于一个或多个数据库的数据结构 数据库中有更多表,但 模型本身无法处理 例如,验证。甚至是ViewModel建立并保存对象的可观察集合,例如“客户”,而不是模型本身

感谢您的反馈

是否存在一个ViewModel服务于两个视图的实例

蒙皮应用程序可以利用此功能

这个模型相当愚蠢 但是模型本身不处理验证

这个模型可以像你喜欢的那样聪明。它可以包括“验证”以确保完整性,但该验证不会包括UI中出现的消息

每个视图都有且只有一个ViewModel

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

是否存在一个ViewModel服务于两个视图的实例

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

验证仅由ViewModel处理

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

这个模型相当愚蠢


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

我完全同意上面所说的。只需一条注释:您的视图模型可以在内部使用其他视图模型。使用这种方法,您可以将视图划分为两个区域,这些区域由不同的视图模型提供服务。只需使用ContentPresenter,将其绑定到Required view model属性(该属性获取Required view model),并使用DataTemplate将Required view与视图模型关联。

是的,我在许多示例中都看到了这一点,其中ViewModel中包含一组ViewModels,非常感谢提醒