使用messenger将参数从一个视图模型传递到另一个视图模型

时间:2013-03-14 12:41:45

标签: wpf mvvm-light

每当我想从View模型打开一个新窗口时,通常我都在使用messenger。 但现在我想从视图模型中打开一个新窗口,并将一个对象从调用视图模型传递给被调用的视图模型。我该如何实现呢? 在我的viewmodelbase类中,目前我有以下方法。

public void SendNotificationMessage(string notification)
        {
            Messenger.Default.Send<NotificationMessage>(new NotificationMessage(notification));
        }

        public void SendNotificationMessageAction(string notification, Action<object> callback)
        {
            var message = new NotificationMessageAction<object>(notification, callback);
            Messenger.Default.Send(message);
        }

请帮帮我

1 个答案:

答案 0 :(得分:3)

您的语法看起来像这样:

//Subscribe
Messenger.Default.Register<OpewNewWindowMessage>(OpenNewWindowMethod);

// Broadcast
var message = new OpewNewWindowMessage();
message.ViewModel = this;
Messenger.Default.Send<OpewNewWindowMessage>(message);

// Subscribed method would look like this
void OpenNewWindowMethod(OpewNewWindowMessage e)
{
    // e.ViewModel would contain your ViewModel object
}

在上面的示例中,您将创建一个名为OpewNewWindowMessage的新类,并为其赋予ViewModel属性,然后在广播消息之前填充该值。

OpenNewWindowMethod()会收到该消息,并可以访问OpewNewWindowMessage.ViewModel以访问ViewModel属性

从技术上讲,如果只传递一个属性,则不需要创建消息对象,但是我通常会发现,如果创建消息对象而不是使用泛型{{{},则会使代码更易于阅读和维护。 1}}就像你的代码一样。