我开发一个WPF应用程序,我有一些问题相互通信的一个视图模型。
我有:
- MainViewModel
- ChildViewModel1
- ChildViewModel2
每次在MainViewModel,ChildViewModel1和ChildViewModel2属性变化应该得到通知。
任何人都可以提出一个解决办法?
编辑:我在一个解决方案的思维descrided MVVM光( 。http://simplemvvmtoolkit.codeplex.com/SourceControl/changeset/view/23821#313594 ),即实现一个消息总线。 它是正确的做法?
the common way for viewmodels to communicate between themselves
is implimentation of theMediator design pattern
here is how it is done in MVVMLight
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27aaefff-e463-451c-87d9-37367a343e0e
in Prism is:
http://blogs.u2u.be/diederik/post/2011/01/15/Using-the-Prism-40-Event-Aggregator.aspx
in Caliburn is:
http://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/
在大多数情况下,我不建议使用任何集中的地方共享“事件” /“通知”,像EventAggregator,等等。这导致带的ViewModels之间不明确的相关关系后的问题。 此类通知有道理在非常特殊的情况下,当监听器/发行商之间的关系是不是即使在设计阶段闻名。 我建议画简单的图用的ViewModels之间的关系,发现使用标准的.NET事件的一种方式,所以,当你的ViewModels之间的明确realtionships像ViewModel1有ViewModel2的引用,以便可以订阅事件或提供自己的回调,所以它会很容易建立这样的事件通知。
我会用由每个视图模型实现的IService。 然后在视图模型,您可以通过服务属性实现INotifyPropertyChanged的视图模型的性能。 例如,我有一个名为INavigationService服务,是由我的视图模型实现的,它有一个像CanNavigate,currentView等我绑定到我的视图模型属性。 改变这些特性可能会导致其他视图模型绑定到导航或改变性质。