c# - Prism/MEF : How can 2 windows' viewmodels talk to each other?

标签 c# wpf window prism mef

基本上,我不确定从哪里开始:

我有我的 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/

相关文章:

c# - Xamarin (XAML) 如何并排放置 2 个标签

c# - 具有空值的 LINQ to SQL

c# - 为不同的 ViewModel 但相同的属性动态显示不同的 View

c# - UWP - 将自定义转换器应用于 x :Uid directive 设置的值

javascript - tabIndex 和 Javascript 弹出窗口

wpf - 关闭子窗口最小化父窗口

Javascript 窗口属性之间的差异

C#通过键列表从字典中获取值子集

c# - 为 ASP .NET MVC 创建单元测试时出现的问题

c# - WPF 绑定(bind)到集合中所有项目的属性