如何在2个VM之间使用MVVM Light IMessenger发送我的消息

时间:2011-05-04 07:15:36

标签: c# wpf mvvm-light

我有2个ViewModel,都使用MVVM Light的ViewModelBase接口

我有一个视图(这是在另一个视图中创建的标签),它处理登录并将其保存在此成员中

private int loginRights;

然后我希望在其他视图中发送var,以便根据userRights级别创建选项卡。 (这不是一个严格的应用程序,而只是一个学习使用MVVM的项目,因此安全性不是问题) 所以我有这个发送它

loginRights = -1;
MessengerInstance.Send(loginRights);

但是后来我怀疑我应该在收到的ViewModel中编写什么,也可以在发送ViewModels发送新数据后立即执行某些接收类?

我有这个

MessengerInstance.Register<int>(this, success);
private void success(int rights)
{
    Console.WriteLine(rights);
}

但是那根本不起作用,但很难找到一些体面的指南

2 个答案:

答案 0 :(得分:1)

不确定为什么这对您不起作用,但使用int作为消息类型是非常糟糕的想法...如果您需要发送{{1具有完全不同含义的值,与登录权限无关?注册int的所有ViewModel也会收到它,但他们不知道这意味着什么。

您应该为您的消息创建特定的类,以便清楚地识别每种消息。


编辑:我查看了你的代码,显然你是在构造函数中显式创建了messenger实例。如果您在其他ViewModel中执行相同操作,则它们将使用不同的信使实例,因此它们将无法交换消息。 您必须在两个ViewModels中使用相同的信使实例。 int,而不是明确地创建信使实例。

答案 1 :(得分:0)

我不知道mvvm-light messenger,但我建议您在发送邮件后注册。

如果你有登录实例和另一个vm实例,并且第一个注册和第二个发送消息,则该场景应该有效。

也许你可以提供更多的信息。

编辑: 看到Thomas Levesque的回答,你必须使用相同的信使实例。单身人士或其他人。