【问题标题】:WPF MVVM - Is it possible for ViewModels to communicate with each other?WPF MVVM - ViewModel 是否可以相互通信?
【发布时间】:2015-05-28 02:10:02
【问题描述】:

我正在尝试使用 MVVM 设计开发一个 WPF 程序,它有两个控件:浏览器和文本框。

我想要两个 ViewModel,一个用于浏览器的逻辑,另一个用于文本框。我环顾四周,但 RelayCommand 似乎仅用于将视图的命令绑定到 ViewModel,而在我的代码中,我还需要两个 ViewModel 相互通信。例如,我正在考虑的机制是当浏览器加载网页时,浏览器 ViewModel 提取 HTML 代码,然后对代码进行一些处理/格式化,一旦完成,它会将代码分配给浏览器 ViewModel 中的属性并引发事件。完成此操作后,文本框 ViewModel 将侦听来自浏览器 ViewModel(或任何其他 ViewModel)的事件并将文本分配为文本框的内容。

有没有办法实现这一点,或者是拥有一个包含两个子 ViewModel 的父 ViewModel 的唯一方法?

谢谢

【问题讨论】:

  • 我敦促您使用 Caliburn micro 而不是 Prism 。 Prism 可以吸收。使用 caliburn,您可以使用一些需要学习的强大功能,但文档不会那么长。

标签: wpf events mvvm viewmodel


【解决方案1】:

我会使用 Prism.PubSubEvents(nuget 包)来使用松散耦合的 pub/syb 事件 https://www.nuget.org/packages/Prism.PubSubEvents/

使用 C#、XAML 和 Prism 在 Windows 应用商店业务应用中的松散耦合组件之间进行通信 https://msdn.microsoft.com/en-us/library/windows/apps/xx130639.aspx

我希望这会有所帮助。

【讨论】:

  • 是的。但其他库也提供此功能,例如 Caliburn.EventAggregator。
【解决方案2】:

是的,这是可能的,而且很简单。只需使用事件聚合器模式在视图模型之间进行通信。我读过的最好的文章是Magnus Montin.

here 是什么 EventAggregator 模式。

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多