.net MVVM Light Messenger没有';行不通

.net MVVM Light Messenger没有';行不通,.net,wpf,mvvm,mvvm-light,.net,Wpf,Mvvm,Mvvm Light,ViewModelA: Messenger.Default.Register<NotificationMessage<int>>(this, OnHitIt); 在其构造函数内部(断点点击以下行): 但由于某些原因,断点从未命中HitIt方法,原因可能是什么…一个原因是ViewModelA不再被任何东西引用,但更有可能的是,令牌查找是通过引用而不是通过值进行的。换句话说,寄存器中的“令牌”与发送中的“令牌”不是同一引用。尝试使用 在ViewModelA上: Messen

ViewModelA:

Messenger.Default.Register<NotificationMessage<int>>(this, OnHitIt);
在其构造函数内部(断点点击以下行):


但由于某些原因,断点从未命中HitIt方法,原因可能是什么…

一个原因是ViewModelA不再被任何东西引用,但更有可能的是,令牌查找是通过引用而不是通过值进行的。换句话说,寄存器中的“令牌”与发送中的“令牌”不是同一引用。

尝试使用

在ViewModelA上:

Messenger.Default.Register<NotificationMessage<int>>(this, OnHitIt);
Messenger.Default.Register(这个,onhiit);
而OnHitIt方法是——

private void OnHitIt(NotificationMessage<int> m)
{
    if (m.Notification == "token")
    {
        // code goes here
        // m.Content will get the int passed in
    }
}
private void onhitt(通知消息m)
{
如果(m.Notification==“令牌”)
{
//代码在这里
//m.Content将获得传入的int
}
}
在ViewModelB上:

Messenger.Default.Send(new NotificationMessage<int>(hitItId, "token"));
Messenger.Default.Send(新的通知消息(hitItId,“令牌”);

No ViewModelA是主视图模型,因此不能超出参考范围(属于父视图模型)。“token”和“token”有什么区别?我正在传递硬编码值。问题已经回答,但仅供参考,token可以是简单值或引用类型。如果使用引用类型,则测试引用。如果是值类型,则测试值。对于字符串,该值是经过测试的。我想它也应该按照我的方式工作,但正如你所说的那样。通过这样做,我了解到这是类型不匹配。int和int?。顺便说一句,我是c#的新手,有什么区别?任何链接都会有助于确认,它无法工作,因为它是for int和int之间的类型不匹配?并且没有给出任何错误。现在我的旧代码也可以工作了。int?表示该值可以包含整数或null,其中as int只能包含整数
Messenger.Default.Send(new NotificationMessage<int>(hitItId, "token"));