【问题标题】:How to use MVVM-Light with tokens?如何将 MVVM-Light 与令牌一起使用?
【发布时间】:2010-08-03 02:50:10
【问题描述】:

我在 MVVM-Light 包中看到我可以发送带有令牌的消息——我需要做的是发送一个对象,并在该对象上附加一条消息——比如添加、编辑、删除等等。

发送和接收此消息的最佳方式是什么?我认为发送它只是: Messenger.Default.Send(myObject, ActionEnum.DELETE);

但是在接收中: Messenger.Default.Register(this, ????, HandleMyMessage);

正确的语法是什么?

谢谢!

【问题讨论】:

    标签: mvvm-light


    【解决方案1】:

    只是作为补充:令牌不是用来识别任务(通知),而是用来识别接收器。使用与发送者相同的令牌注册的接收者将收到消息,而所有其他接收者将不会收到。

    对于您想要做的事情,我使用工具包中包含的可选 NotificationMessage 类型。它有一个额外的字符串属性(通知),您可以将其设置为您想要的任何内容。我用它来向接收者“下达命令”。

    干杯, 洛朗

    【讨论】:

    • 令牌可以是任何对象,而不仅仅是接收者的类型对吗?
    • 没错,token与接收者没有任何关系,它只是一个对象(或者一个int等值)。如果你愿意,它是一个标识符。
    • @LBugnion 如果瑞恩的回答是这个问题的最佳实践,你能评论一下吗?或者你可以发布你将如何实现它?谢谢
    • 是的,这也是我的做法,也是最初的意图。干杯!
    【解决方案2】:

    这里是发送和寄存器的快速代码部分。您的通知是指示接收者意图是什么的消息。内容是您要发送的项目,您可以进一步确定谁发送了该消息,甚至该消息针对发件人和目标的对象。

    Messenger.Default.Send<NotificationMessage<Job>>(
        new NotificationMessage<Job>(this, myJob, "Add")
    );
    
    Messenger.Default.Register<NotificationMessage<Job>>(
    this, nm =>
    
    {
        // this might be a good idea if you have multiple recipients.
        if (nm.Target != null &&
            nm.Target != this)
            return;
    
        // This is also an option 
        if (nm.Sender != null &&
            nm.Sender != expectedFrom) // expectedFrom is the object whose code called Send
            return;
    
        // Processing the Message
        switch(nm.Notification)
        {
            case "Add":
                Job receivedJob = nm.Content;
                // Do something with receivedJob
                break;
            case "Delete":
                Job receivedJob = nm.Content;
                // Do something with receivedJob
                break;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 1970-01-01
      • 2014-10-28
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多