比喻:像漂流瓶一样发送一个Message,任何人有兴趣就可以拾起来。
MVVM Light中的Message的使用分为三个步骤:
1.创建一个类,包含要传递的Message。
2.在ViewModel中,实例化这个Message类并广播这个Message。
3.在MainPage.xaml.cs中注册此Message并在接收到的时候处理它。
在项目中创建一个新Class,命名为GoToPageMessage.
1
2
3
4
5
6
7
8
9 |
1: using
System; 2: 3: namespace
MvvmLightNavigationBehaviorAndMessages 4: { 5: public
class
GoToPageMessage 6: { 7: public
string
PageName { get ; set ; } 8: } 9: } |
返回MainViewModel.cs并移除GoToPage2方法。创建一个GoToPageMessage的实例(初始化你要导航的页面名称),并使用Messager对象来广播此Message,如下所示:
1
2
3
4
5
6 |
1: private
object
GoToPage2() 2: { 3: var
msg = new
GoToPageMessage() { PageName = "Page2"
}; 4: Messenger.Default.Send<GoToPageMessage>( msg ); 5: return
null ; 6: } |
需要引用以下命名空间:
1 |
1: using
GalaSoft.MvvmLight.Messaging; |
这样就广播了Message,剩下的就是注册一个收件人和响应这个Message。要做到这一点,返回MainPage.xaml.cs,在构造函数或MainPage_Loaded函数中注册Message:
1
2
3
4
5 |
1: Messenger.Default.Register<GoToPageMessage> 2: ( 3: this , 4: ( action ) => ReceiveMessage( action ) 5: ); |
你需要添加Messaging的声明。
ReceiveMessage是你要写的一个方法,用来实现导航。
1
2
3
4
5
6
7
8
9
10 |
1: private
object
ReceiveMessage( GoToPageMessage action ) 2: { 3: StringBuilder sb = new
StringBuilder( "/Views/"
); 4: sb.Append( action.PageName ); 5: sb.Append( ".xaml"
); 6: NavigationService.Navigate( 7: new
System.Uri( sb.ToString(), 8: System.UriKind.Relative ) ); 9: return
null ; 10: } |
Build程序并运行,点击MainPage的按钮将导航到Page2.
MVVM Light中的Message,布布扣,bubuko.com
原文:http://www.cnblogs.com/cw_volcano/p/3614798.html