PRISM/MEF:2个窗口的视图模型如何相互通信?

mic*_*ael 3 c# wpf prism mef window

基本上,我不知道从哪里开始:

我有我的Shell.xaml窗口.我也有我的Popup.xaml窗口.

我设置Shell.xaml以导入PopupWindow然后当PopupWindow Loaded事件触发时,它会:

Popup.Owner = this;
Popup.Show();
Run Code Online (Sandbox Code Playgroud)

现在,我需要能够让PopupWindow的ViewModel与Shell.xaml进行通信.基本上,我需要能够让PopupWindow告诉用户输入的Shell的ViewModel信息.


更新:

为了保持这种分离,我不想将客户端的viewmodel的任何实例传递给弹出窗口,我更倾向于让Popup的ViewModel以某种方式与客户端的ViewModel进行通信而不知道它实际上是在与谁通话.

JMa*_*sch 7

看一下Prism中的事件聚合器.Prism中的聚合事件旨在促进解耦,视图间模型通信.如果你想要"纯粹的"MVVM,我认为它会是这样的:

  • 您的ViewModel发布它想要显示弹出窗口的消息(交互请求).
  • 您的View正在侦听该消息,并显示弹出窗口(将您的视图模型与理解提示的显示方式分离)
  • 您的ViewModel获取弹出窗口的结果(您的弹出窗口只是一个视图,并且应该对提高聚合事件一无所知)
  • 您的ViewModel引发Prism Aggregate事件(包含用户输入的对象是有效负载)
  • 你的shell正在监听那个事件.