我确信之前已经提出这个问题,但我无法得到正确答案。
此处的情景:
我有一个网格,每行有两个图形。单击Graph1上的某些内容,使用Graph1的Code Behind发送消息:
Messenger.Default.Send<MyCustomMessageType>(message);
然后,在我的ViewModel for Graph 2上,我在构造函数中注册:
Messenger.Default.Register<MyCustomMessageType>(this, (message) => UpdateDataContext(message));
问题是Send,现在将它发送到该类型的ViewModel的所有实例(这确实有意义)。
如何阻止这种情况发生?
答案 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这种方法的最大好处之一(除了明显有用的粒度和解耦)是对代理的支持。