我需要持有至少1个视图模型来处理我的所有视图吗

本文关键字:视图 模型 处理 我的 1个 | 更新日期: 2023-09-27 17:59:36

例如,我有几个视图,每个视图都有viewmodel,然后我的mainviewmodel将处理所有这些视图,以便我导航或将其加载到mainwindow。我是否绕过了MVVM的规则?因为有一个了解我所有视图的主视图模型?

我需要持有至少1个视图模型来处理我的所有视图吗

MVVM设计有两种方法:视图优先和视图模型优先。尽管它们都是有效的,但它们也有起有落。两者都确保视图模型不以任何方式依赖于视图,只有视图依赖于视图模型。您的解决方案是有效的MVVM,但会导致视图层和视图模型层之间存在循环依赖关系。所以我建议坚持使用

先查看

您可以从MainWindow.xaml开始,并根据自己的喜好进行设计。通过添加,您可以为视图代码中的每个窗口/对话框/控件实例化一个视图模型

<MainWindow.DataContext>
  <vm:MainViewModel>
</MainWindow.DataContext>

并开始绑定所有状态,以便将行为移动到MainViewModel类中。

这种方法的专业版使用依赖注入容器(autofac、ninject等)来实例化MainViewModel,而MainWindow实际上并不知道视图模型的具体类型。

首先查看模型

在引导程序中,您以某种方式将MainWindow.DataContext设置为具有其视图模型的实例,但除此之外,您依赖DataTemplate来实例化视图(抱歉,无法使用DataTemplate实例化Window)。

视图模型中的每个可绑定属性都可以绑定到ContentPresenter,视图模型中每个可绑定集合都可以提供给ItemPresenter的子类(ListBox、ComboBox,等等),您就差不多完成了。