首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM-查看模型-查看模型通信

MVVM-查看模型-查看模型通信
EN

Stack Overflow用户
提问于 2010-03-19 11:17:06
回答 4查看 11.7K关注 0票数 13

如何使用MVVM Light让两个视图模型相互通信。我知道如何使用messenger类和注册等。这是我的场景

代码语言:javascript
复制
A Settings View ---> a Settings View Model 
                                  .
                                  .
                                  .

A MainPage View ---> A MainPage ViewModel

如果设置视图中的某些内容发生更改,它将向设置视图模型返回消息。因此,我希望设置视图模型与MainPage视图模型进行沟通,以了解更改的内容。然后,THe MainPage ViewModel将告诉视图。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-19 11:30:19

这种类型的问题的一个常见模式是Mediator (两个视图模型都引用的一个类,可用于在两者之间传递消息)。

Mediator类后来被移到了Cinch WPF/SL MVVM Framework,它似乎仍然在积极地开发/支持。

我更喜欢的模式是Event Aggregator,可以在Prism框架中找到一个例子。在此模式中,不同的视图模型订阅来自聚合器的事件,而其他视图模型发布事件。

希望这能有所帮助

票数 17
EN

Stack Overflow用户

发布于 2010-03-19 17:03:54

我赞同Nigel使用Mediator的建议,看看Josh Smith的博客和他对此的实现:

http://joshsmithonwpf.wordpress.com/?s=mediator

在底部,您可以下载Mediator原型和演示,只需记住将其从.doc重命名为.zip。

希望这能帮到你。

票数 3
EN

Stack Overflow用户

发布于 2010-03-19 17:29:21

你可以尝试的一件事是尝试实现依赖倒置。定义一个带有一些动作/契约的接口。在MainviewModel上实现该接口。将该接口作为成员变量传递给SettingsViewModel。因此,当设置视图模型必须向main通知某些内容时,它将使用该接口。此外,其他视图模型也可以使用相同的策略。

代码语言:javascript
复制
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();    
     }

  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2474768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档