MVVM的澄清-视图之间的交互

MVVM的澄清-视图之间的交互,mvvm,Mvvm,我正在使用WPF并尝试以MVVM的方式编程 我知道每个视图都有自己的视图模型,这非常有效。不过,我正在努力管理视图之间的交互 假设我有两个视图,View1和View2,每个视图都有自己的ViewModel、ViewModel1和ViewModel2。如果我在View1上有一个组合框和一个按钮,那么关闭第一个视图、通知第二个视图选择并在按下按钮后显示第二个视图的正确方法是什么?它似乎不应该出现在模型中,因为它是一个UI的东西。ViewModel不应该知道如何打开和关闭WPF表单(或者是否应该?),

我正在使用WPF并尝试以MVVM的方式编程

我知道每个视图都有自己的视图模型,这非常有效。不过,我正在努力管理视图之间的交互

假设我有两个视图,View1和View2,每个视图都有自己的ViewModel、ViewModel1和ViewModel2。如果我在View1上有一个组合框和一个按钮,那么关闭第一个视图、通知第二个视图选择并在按下按钮后显示第二个视图的正确方法是什么?它似乎不应该出现在模型中,因为它是一个UI的东西。ViewModel不应该知道如何打开和关闭WPF表单(或者是否应该?),视图也不应该知道任何其他ViewModel(或者是否应该?)

那么这些问题是如何解决的呢?简言之:

1) 如何在视图之间传递数据


2) 是什么管理视图的生存期/可见性?

这将取决于您是先执行视图模型还是先执行视图,而确切的实现细节将取决于您是否使用视图模型。如果您没有使用框架,那么我强烈建议您开始使用框架

在您的示例中,当按下按钮时,将调用
ViewModel1
上的方法。如果首先执行视图模型(我建议这样做),您将实例化
ViewModel2
的一个实例,此时您可以将组合框选择传递给
ViewModel2
的构造函数

根据您的框架,将有不同的方式显示与
viewmodel关联的视图2

对于1)您可以通过
DataModel
同步数据。如果每个视图共享同一个
DataModel
实例,并且实现了
INotifyPropertyChanged
,则可以同时更新多个视图


您的第二个问题是设计问题,@devdigital表示,这取决于它是视图优先还是视图模型优先。我会考虑引入一个控制器类,就像ASP.NETMVC工作一样,它控制显示哪个视图。你可以在VIEW模型上公开一个<代码> VIEWORKEX/COD>事件,控制器可以监听,并基于你的工作流程打开另一个视图。

< P>你可以考虑引入<强> < /强>来负责ViewModels的生命周期管理。此外,它们在ViewModels之间进行调解

的示例应用程序展示了如何实现这些控制器