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;
}
}
}
这工作正常。我的问题是:这是视觉模型之间沟通的好方法,还是在这个设计中有任何弱点?
链接VM的'规范'方法是使用内置于Prism的Event Aggregator。它使用弱耦合设计,避免与事件相关的内存泄漏。你有点建立它的替代版本,但是有一个紧密耦合的模式。 –