我正在使用WPF MVVM应用程序,其中有2个 View View1和View2及其各自的ViewModel。现在,我想在View1中单击一个按钮将关闭View1并使用ViewModel1打开View2。
另外,我想从ViewModel1打开时将某些数据(例如人员类的实例)传递给ViewModel2,这将用于在View2中显示信息。
仅在ViewModels中实现此目标的最佳方法,可能是最简单的方法,我想避免在后面的代码中编写用于导航的代码。
最佳答案
如何使用Mediator模式(例如,参见technical-recipes.com或John Smith)或弱事件? Afaik的几个MVVM框架/库(例如PRISM,Caliburn.Micro,MVVMCross)已经随附了用于这些的基础结构代码。
还有独立于任何特定MVVM框架的独立库,例如Appccelerate EventBroker可以帮助您根据自己的需要实现某些目标。
但是,对于事件,我想知道您是否需要一些有关事件是否得到“正确”处理的反馈。有多种方法可以实现此目的(更改事件args的值,处理事件同步,引发事件之后,检查事件args的值),但是它们不像方法的返回值或方法抛出异常(exception)。
编辑:对不起,我刚刚意识到第二个View/ViewModel尚未打开。因此,我的“解决方案”不(简单地)适用。您需要在 View 模型树中传递指令“up”,甚至传递给根,您可以在其中实例化并显示新的 View 模型(在新窗口中显示还是在现有 View 中以ContentControl的形式显示?)
关于c# - View 模型之间的WPF MVVM通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23798425/