2013-07-21 56 views
0

我有一个应用程序,我在另一个viewmodel内打开一个新视图(与视图模型)。新的Viewmodel需要来自调用者视图模型的一些参数。通过事件ViewModels之间的通信

现在我引入了一个名为Messenger的类,它看起来像:

public class Messenger 
    { 
     private static Messenger instance; 
     public static Messenger Instance 
     { 
      get { return instance ?? (instance = new Messenger()); } 
     } 

     private Messenger() { } 

     public void SendMessage(Message message) 
     { 
      OnMessageSent temp = MessageSent; 
      if (temp != null) 
       temp(message); 
     } 

     public delegate void OnMessageSent(Message message); 
     public event OnMessageSent MessageSent; 
    } 

消息级的样子:

public class Message 
{ 
    public Type TargetType { get; set; } 
    public object Sender { get; set; } 
    public Type ValueType { get; set; } 
    public object Value { get; set; } 
    public string AdditionalInfo { get; set; } 
} 

该建筑物的用途是:

的接收器 - 消息的视图模型必须添加

Messenger.Instance.MessageSent += MessageSent;

它是构造函数。并且在实现中可能会看起来像:

private void MessageSent(Message message) 
{ 
    if(message.TargetType == typeof(SecondViewModel)) 
    { 
     if (message.ValueType == typeof (double)) 
      { 
      this.MyValue= (double) message.Value; 
      } 
    } 
    } 

这工作正常。我的问题是:这是视觉模型之间沟通的好方法,还是在这个设计中有任何弱点?

+1

链接VM的'规范'方法是使用内置于Prism的Event Aggregator。它使用弱耦合设计,避免与事件相关的内存泄漏。你有点建立它的替代版本,但是有一个紧密耦合的模式。 –

回答