WPF&x2B;具有多窗口处理的MVVM

WPF&x2B;具有多窗口处理的MVVM,wpf,mvvm,Wpf,Mvvm,我在看一段视频,很好地解释了MVVM。然而,它似乎只显示一个窗口应用程序模型。如果要处理多窗口模型,您必须做什么 据我所见。。app.xaml链接到主窗口(作为DataContext)。由于app.xaml是它执行主窗口的起点。主窗口将ViewModels作为绑定,因此可以处理他的ViewModels。。但所有这些都只适用于一个窗口。。如果要引入第二个窗口,会发生什么?你如何进行 谢谢。您可以通过服务从主windows视图模型实例化视图(窗口)类型,作为抽象注入。然后,您可以在服务中以编程方式设

我在看一段视频,很好地解释了MVVM。然而,它似乎只显示一个窗口应用程序模型。如果要处理多窗口模型,您必须做什么

据我所见。。app.xaml链接到主窗口(作为DataContext)。由于app.xaml是它执行主窗口的起点。主窗口将ViewModels作为绑定,因此可以处理他的ViewModels。。但所有这些都只适用于一个窗口。。如果要引入第二个窗口,会发生什么?你如何进行


谢谢。

您可以通过服务从主windows视图模型实例化视图(
窗口
)类型,作为抽象注入。然后,您可以在服务中以编程方式设置此窗口的
DataContext
,找到相应的视图,并使用
myWindow.Show()
myWindow.ShowDialog()
显示窗口。MVVM框架,例如具有一个
WindowManager
,用于为您处理视图位置和视图/视图模型绑定。

您从特定框架谈论WindowManager。但是你认为我们可以用一个包含窗口列表的静态类来处理这个问题吗?是的,当然可以,但是你可能想让它基于实例,并在视图模型中使用IWindowManager之类的抽象,正如你想在单元测试中模拟对话结果一样,虽然这显然是一个可行的解决方案(从“工作”的意义上来说),但这确实违背了MVVM的精神;MVVM旨在保持功能和UI之间的界限非常清晰,当您开始处理ViewModel中的UI元素时,您会模糊(如果不是完全消除)这种区别。另一种非常常见的做法是将ViewModel完全放在另一个部件中(以帮助保持此边界),这将不允许您这样做。@Adam_Robinson Umm。是的,你没有错。实际上,通过使用WindowManager,您可以将ViewModel绑定到违反MVVM的UI上,如果这是您所说的话?@Rushino:有几种方法可以满足您的要求;我这样做的方式使用了WPF行为,但我还没有写过关于它的文章,而且在一个单一的答案中讨论有点太多了。几个MVVM/WPF框架提供的将ViewModel映射到视图的各种方法都很好,因为它们都被设计为只允许ViewModel处理ViewModel端,并且映射在较低的级别上进行。您不想做的是在ViewModel中直接实例化视图对象之类的事情。这就是为什么有一个专用的ViewModel部件是一个好主意。