2013-03-14 88 views
4

无论何时我想从View模型打开一个新窗口,通常我都使用Messenger。 但是现在我想从视图模型中打开一个新窗口,并将一个对象从调用视图模型传递给所谓的视图模型。我怎样才能实现这个? 在我的viewmodelbase类目前我有以下方法。使用Messenger将参数从一个视图模型传递到另一个

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); 
     } 

请帮我

回答

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访问视图模型属性

从技术上讲,你并不需要创建一个消息对象,如果你只是绕过一个属性,但是我通常会发现它使代码更容易阅读和维护,如果您创建一个消息对象而不是像您在代码中一样使用通用<object>

相关问题