基本上,我不确定从哪里开始:
我有我的 Shell.xaml 窗口。 我还有我的 Popup.xaml 窗口。
我将 Shell.xaml 设置为导入 PopupWindow,然后当 PopupWindow Loaded 事件触发时,它会:
Popup.Owner = this;
Popup.Show();
现在,我需要能够让 PopupWindow 的 ViewModel 与 Shell.xaml 通信。基本上,我需要能够让 PopupWindow 告诉 Shell 的 ViewModel 用户输入的信息。
更新:
为了保持这种解耦,我不想将客户端 View 模型的任何实例传递给弹出窗口,我宁愿让弹出窗口的 ViewModel 以某种方式与客户端的 ViewModel 进行通信而不知道它是谁实际上是在说话。
最佳答案
查看 Prism 中的事件聚合器。 Prism 中的聚合事件旨在作为促进解耦的 View 模型间通信的一种方式。如果您要使用“纯”MVVM,我认为应该是这样的:
- 您的 ViewModel 发布一条消息(交互请求),它希望显示一个弹出窗口。
- 您的 View 正在监听消息,并显示弹出窗口(将您的 View 模型与理解提示的显示方式分离)
- 您的 ViewModel 获取弹出窗口的结果(您的弹出窗口只是一个 View ,应该对引发聚合事件一无所知)
- 您的 ViewModel 引发 Prism 聚合事件(包含用户输入的对象是有效负载)
- 您的 shell 正在监听该事件。
关于c# - Prism/MEF : How can 2 windows' viewmodels talk to each other?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491376/