MVVM Light Messenger - 发送和注册对象

33

有没有人能够友善地给我提供一个在使用MVVM Light的Messenger时如何在类之间发送和注册自定义对象的示例,或者指导我学习此内容的教程(最好是具体的示例)?我一直在尝试使用Messenger将我的项目中的一个对象传递到另一个类,但我从未成功过。我在网上搜索了示例,但没有找到任何可以帮助我的内容。谢谢。

2个回答

64

微软的Jesse Liberty有一篇非常好的具体步骤,介绍如何在MVVM Light中使用消息传递。其基本思想是创建一个类作为您的消息类型,订阅该类,然后发布消息。

public class GoToPageMessage
{
   public string PageName { get; set; }
}

这将基于上述类型/类发送消息...
private object GoToPage2()
{
   var msg = new GoToPageMessage() { PageName = "Page2" };
   Messenger.Default.Send<GoToPageMessage>( msg );
   return null;
}

现在,您可以注册给定的消息类型,该类型与上面定义的类相同,并提供在接收到消息时将被调用的方法,在此示例中为ReceiveMessage
Messenger.Default.Register<GoToPageMessage>
( 
     this, 
     ( action ) => ReceiveMessage( action ) 
);

private object ReceiveMessage( GoToPageMessage action )
{
   StringBuilder sb = new StringBuilder( "/Views/" );
   sb.Append( action.PageName );
   sb.Append( ".xaml" );
   NavigationService.Navigate( 
      new System.Uri( sb.ToString(), 
            System.UriKind.Relative ) );
   return null;
}

1
我更喜欢在消息中使用视图的类型而不是名称的一部分,因为当重命名页面或将其移动到另一个命名空间/文件夹时,名称会发生变化。 - Emond
谢谢,这正是我想要的。我认为我也将通过传递类型而不是字符串来实现,智能感应使生活更加愉快。 - Billy Jake O'Connor

2
我发现这篇文章这篇文章非常有用。对于第二个参考,请使用末尾的“下一页”按钮,以查看他们制作的示例。"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接