如何使用MVVM Light让两个视图模型相互通信。我知道如何使用messenger类和注册等。这是我的场景
A Settings View ---> a Settings View Model
.
.
.
A MainPage View ---> A MainPage ViewModel如果设置视图中的某些内容发生更改,它将向设置视图模型返回消息。因此,我希望设置视图模型与MainPage视图模型进行沟通,以了解更改的内容。然后,THe MainPage ViewModel将告诉视图。
发布于 2010-03-19 11:30:19
这种类型的问题的一个常见模式是Mediator (两个视图模型都引用的一个类,可用于在两者之间传递消息)。
Mediator类后来被移到了Cinch WPF/SL MVVM Framework,它似乎仍然在积极地开发/支持。
我更喜欢的模式是Event Aggregator,可以在Prism框架中找到一个例子。在此模式中,不同的视图模型订阅来自聚合器的事件,而其他视图模型发布事件。
希望这能有所帮助
发布于 2010-03-19 17:03:54
我赞同Nigel使用Mediator的建议,看看Josh Smith的博客和他对此的实现:
http://joshsmithonwpf.wordpress.com/?s=mediator
在底部,您可以下载Mediator原型和演示,只需记住将其从.doc重命名为.zip。
希望这能帮到你。
发布于 2010-03-19 17:29:21
你可以尝试的一件事是尝试实现依赖倒置。定义一个带有一些动作/契约的接口。在MainviewModel上实现该接口。将该接口作为成员变量传递给SettingsViewModel。因此,当设置视图模型必须向main通知某些内容时,它将使用该接口。此外,其他视图模型也可以使用相同的策略。
public interface IMessenger
{
void NotifyAction();
}
public class MainViewModel:InotifyProprtyChanged,IMessenger
{
public void NotifyAction()
{
}
}
public class SettingsViewModel:INotifyPropertyChanged
{
public IMessenger Messenger{get;set;}
public void SomeCommandExecutor()
{
if(Messenger!=null)
{
Messenger.NotifyAction();
}
}
}https://stackoverflow.com/questions/2474768
复制相似问题