问题描述
|
我正在使用WPF并尝试以MVVM方式编程。
我了解每个视图都有自己的视图模型,并且效果很好。我正在努力管理视图之间的交互。
假设我有两个视图View1和View2,每个视图都有自己的viewmodel,viewmodel1和viewmodel2。如果我在View1上有一个组合框和一个按钮,则关闭第一个视图,将所选内容通知第二个视图并在按下按钮后显示第二个视图的正确方法是什么?似乎它不应该进入模型,因为它是UI的事情。 viewmodel不应该知道如何打开和关闭WPF表单(或者应该吗?),而视图也不应该知道其他任何viewmodel(或者应该吗?)。
那么如何解决这些问题呢?简而言之:
1)如何在视图之间传递数据?
2)什么管理着视图的生命周期/可见性?
解决方法
这将取决于您是先执行视图模型还是先执行视图,确切的实现细节将取决于您是否使用MVVM框架。如果您不使用框架,则强烈建议您开始使用一个框架。
在您的示例中,当按下按钮时,将调用
ViewModel1
上的方法。如果首先进行视图模型(我建议这样做),则将实例化ViewModel2
的实例,此时,您可以将组合框选择传递给ViewModel2
的构造函数。
根据您的框架,将显示与ways1ѭ相关的视图的方法有多种。
, 对于1),您可以通过DataModel
同步数据。假设每个视图共享“ 4”的相同实例,并且实现“ 6”,则可以模拟更新多个视图。
您的第二个问题是设计问题,因为@devdigital表示它可能取决于首先是View还是ViewModel。我会考虑以与控制显示哪个视图的ASP.Net MVC相同的方式来介绍Controller类。您可以在ViewModel上公开一个ѭ7which事件,控制器可以收听该事件,并根据您的工作流打开另一个视图。
, 您可以考虑引入负责ViewModel生命周期管理的Controller。此外,它们在ViewModel之间进行中介。
WPF应用程序框架(WAF)的示例应用程序说明了如何实现这些控制器。