MVVM Light消息 - 多个ViewModel实例

时间:2013-07-04 13:32:43

标签: c# .net mvvm mvvm-light

我确信之前已经提出这个问题,但我无法得到正确答案。

此处的情景:

我有一个网格,每行有两个图形。单击Graph1上的某些内容,使用Graph1的Code Behind发送消息:

Messenger.Default.Send<MyCustomMessageType>(message);

然后,在我的ViewModel for Graph 2上,我在构造函数中注册:

Messenger.Default.Register<MyCustomMessageType>(this, (message) => UpdateDataContext(message));

问题是Send,现在将它发送到该类型的ViewModel的所有实例(这确实有意义)。

如何阻止这种情况发生?

3 个答案:

答案 0 :(得分:3)

发送令牌以指定接收者

void Register<TMessage>(object recipient, object token, Action<TMessage> action);
void Send<TMessage>(TMessage message, object token);

示例:

MessengerInstance.Register<Foo>(this, "thespecialone", theFoo=> FunctionFoo(theFoo));
MessengerInstance.Send<Foo>(message, "thespecialone");

答案 1 :(得分:0)

谢谢大家的答案。这条消息不是我的问题。问题是我不应该使用ViewModelLocator。因为每行都需要自己的ViewModel,所以我摆脱了使用ViewModelLocator并在控件的Onload中实例化了ViewModel并将其设置为Datacontext。谢谢你的建议。

答案 2 :(得分:0)

首先,您可以为构造函数之外的消息注册视图模型,最好是在ioc中。其次,不要使用Default(单例),管理Messanger实例,因为您需要特定的视图模型组。 PS这种方法的最大好处之一(除了明显有用的粒度和解耦)是对代理的支持。