如何获取在 2 个虚拟机之间使用 MVVM Light IMessenger 发送的消息

发布于 2024-11-04 23:06:22 字数 616 浏览 1 评论 0原文

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

我有一个视图(这是在另一个相关视图中创建的选项卡),它处理登录并将其保存在该成员中

private int loginRights;

,然后我希望将该 var 发送到其他视图,以便它可以根据用户权限级别创建选项卡。 (这不是一个 Serius 应用程序,而只是一个学习使用 MVVM 的项目,因此安全性不是问题) 所以我有这个要发送

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

但是我怀疑我应该在接收 ViewModel 中编写什么,是否有可能让接收类在发送 ViewModel 发送新数据后立即执行某些操作?

我有这个

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

,但这根本不起作用,但很难找到一些像样的指南

I have 2 ViewModels and both use the ViewModelBase Interface from MVVM Light

I have one view (Which is a tab created in the other view in question) which handles login and saves that in this member

private int loginRights;

I then want that var to be sent recieved in the other view so it can create tabs depending on the userRights level. (This is not a serius app, but merely a project for learning to use MVVM so security is NOT an issue)
So I have this to send it

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

But then I am in doubt what I am supposed to write in the recieving ViewModel, also is it possible to get the recieving class to execute something as soon as the sending ViewModels sends new data?

I have this

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

But that aint working at all, but its pretty hard to find some decent guides

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

横笛休吹塞上声 2024-11-11 23:06:22

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

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


编辑:我查看了您的代码,显然您正在构造函数中显式创建信使实例。如果您在其他 ViewModel 中执行相同的操作,它们将使用不同的信使实例,因此它们将无法交换消息。 您必须在两个 ViewModel 中使用相同的信使实例。尝试使用 Messenger.Default 来代替显式创建信使实例,它应该可以正常工作。

Not sure why this isn't working for you, but using int as the message type is a very bad idea... What if you need to send an int value that has a completely different meaning, unrelated to login rights? All ViewModels that registered for int will receive it too, and they won't know what it means.

You should create specific classes for your messages, so that each kind of message is clearly identifiable.


EDIT: I had a look at your code, apparently you're creating the messenger instance explicitly in the constructor. If you do the same in the other ViewModel, they will use different messenger instances, so they won't be able to exchange messages. You have to use the same messenger instance in both ViewModels. Instead of creating a messenger instance explicitly, try using Messenger.Default, and it should work fine.

旧情勿念 2024-11-11 23:06:22

我不知道 mvvm-light Messenger,但我建议您在发送消息后注册。

如果您有登录实例和另一个虚拟机实例,并且您首先注册并第二次发送消息,则该方案应该有效。

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

编辑:
请参阅 Thomas Levesque 的回答,当然,您必须使用相同的信使实例。单例或其他东西。

i dont know mvvm-light messenger, but i suggest that do you register after you send your message.

the scenario should work if you have the login instance and the other vm instance and if you the first register and second send the message.

maybe you can give some more infos.

EDIT:
see Thomas Levesque answer, you have to use the same instance of the messenger of course. Singleton or somenthing else.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文