【问题标题】:MVVM Light Messenger doesn't workMVVM Light Messenger 不起作用
【发布时间】:2011-06-16 21:57:28
【问题描述】:

ViewModelA:

在它的构造函数中(断点在下面一行):

Messenger.Default.Register<int>(this, "token", OnHitIt);

ViewModelB:

断点确实命中了这一行:

Messenger.Default.Send(hitItId, "token")

但是由于某种原因断点永远不会命中 OnHitIt 方法,可能是什么原因...

【问题讨论】:

    标签: .net wpf mvvm mvvm-light


    【解决方案1】:

    尝试使用

    在 ViewModelA 上:

    Messenger.Default.Register<NotificationMessage<int>>(this, OnHitIt);
    

    OnHitIt 方法将是-

    private void OnHitIt(NotificationMessage<int> m)
    {
        if (m.Notification == "token")
        {
            // code goes here
            // m.Content will get the int passed in
        }
    }
    

    在 ViewModelB 上:

    Messenger.Default.Send(new NotificationMessage<int>(hitItId, "token"));
    

    【讨论】:

    • 我想它也应该按照我的方式工作,但正如你所说的那样。通过这样做,我了解到这是类型不匹配。整数和整数?顺便说一句,我是 c# 的新手,有什么区别?任何链接都会有所帮助
    • 已确认,因为 int 和 int 的类型不匹配,它不起作用?并没有给出任何错误。现在我的旧代码也可以工作了。
    • 整数?表示该值可以容纳整数或空值,而 int 只能容纳整数
    【解决方案2】:

    一个原因是 ViewModelA 不再被任何东西引用,但更可能是令牌查找是通过引用而不是通过值。换句话说,Register 中的“token”与 Send 中的“token”不同。

    【讨论】:

    • No ViewModelA 是 MainViewModel,因此不能超出参考(父视图模型的种类)。 “令牌”与“令牌”有何不同?我传递的是硬编码值。
    • 已回答问题,但仅供参考,token 可以是简单值或引用类型。如果使用引用类型,则测试引用。如果是值类型,则测试值。对于字符串,值是经过测试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2011-07-12
    相关资源
    最近更新 更多