WPF MVVM - ViewModel 是否可以相互通信?
WPF MVVM - Is it possible for ViewModels to communicate with each other?
我正在尝试使用 MVVM 设计开发一个 WPF 程序,它有两个控件:浏览器和文本框。
我想要两个 ViewModel,一个用于浏览器逻辑,另一个用于文本框。我环顾四周,但 RelayCommand 似乎只用于将视图命令绑定到 ViewModel,而在我的代码中,我还需要两个 ViewModel 相互通信。例如,我想的机制是当浏览器加载网页时,浏览器 ViewModel 提取 HTML 代码,然后对代码执行一些 processing/formatting,一旦完成,它会将代码分配给浏览器 ViewModel 中的 属性 并引发事件。完成后,文本框 ViewModel 将侦听来自浏览器 ViewModel(或任何其他 ViewModel)的事件,并将文本分配为文本框的内容。
有没有办法实现这个,或者是拥有包含两个子 ViewModel 的父 ViewModel 的唯一方法?
谢谢
我会使用松散耦合的 pub/syb 事件,使用 Prism.PubSubEvents(nuget 包)
https://www.nuget.org/packages/Prism.PubSubEvents/
使用 C#、XAML 和 Prism 在 Windows 商店业务应用程序中松散耦合的组件之间进行通信
https://msdn.microsoft.com/en-us/library/windows/apps/xx130639.aspx
希望对您有所帮助。
是的,这是可能的,而且很简单。只需使用事件聚合器模式在视图模型之间进行通信。我读过的最好的文章是 Magnus Montin.
什么是 EventAggregator 模式here。
我正在尝试使用 MVVM 设计开发一个 WPF 程序,它有两个控件:浏览器和文本框。
我想要两个 ViewModel,一个用于浏览器逻辑,另一个用于文本框。我环顾四周,但 RelayCommand 似乎只用于将视图命令绑定到 ViewModel,而在我的代码中,我还需要两个 ViewModel 相互通信。例如,我想的机制是当浏览器加载网页时,浏览器 ViewModel 提取 HTML 代码,然后对代码执行一些 processing/formatting,一旦完成,它会将代码分配给浏览器 ViewModel 中的 属性 并引发事件。完成后,文本框 ViewModel 将侦听来自浏览器 ViewModel(或任何其他 ViewModel)的事件,并将文本分配为文本框的内容。
有没有办法实现这个,或者是拥有包含两个子 ViewModel 的父 ViewModel 的唯一方法?
谢谢
我会使用松散耦合的 pub/syb 事件,使用 Prism.PubSubEvents(nuget 包) https://www.nuget.org/packages/Prism.PubSubEvents/
使用 C#、XAML 和 Prism 在 Windows 商店业务应用程序中松散耦合的组件之间进行通信 https://msdn.microsoft.com/en-us/library/windows/apps/xx130639.aspx
希望对您有所帮助。
是的,这是可能的,而且很简单。只需使用事件聚合器模式在视图模型之间进行通信。我读过的最好的文章是 Magnus Montin.
什么是 EventAggregator 模式here。