MvvmLight信使需要三个部分:
1、自定义信件类,普通的Model,供在发布者和订阅者之间传递信息用。
2、发布,通常是在某一事件函数中进行发布,Messenger.Default.Send
3、订阅,Messenger.Default.Register
命名空间:GalaSoft.MvvmLight.Messaging
用途:ViewModel之间通信、ViewModel和View之间通信
下面是ViewModel之间通信的例子:使用TextBox控制MainWindow的标题,如图
1、首先,新建信件类,起名TitleTextChangedMessenger(发布者为主动方,所以信件类名称以发布者为主)。
public class TitleTextChangedMessenger { public string NewText { get; set; } // 用做返回值 public string Result { get; set; } }
2、新建MainViewModel类,TitleTextBoxViewModel类。
(如果选择在NuGet内完全安装MVVM Light,则会默认创建MainViewModel类)
public class MainViewModel : ViewModelBase { public MainViewModel() { // 订阅 Messenger.Default.Register<TitleTextChangedMessenger>(this, (messenger) => { Title = messenger.NewText; messenger.Result = "Success"; }); } string _title; public string Title { get { return _title; } set { if (_title != value) { _title = value; RaisePropertyChanged("Title"); } } } }
public class TitleTextBoxViewModel : ViewModelBase { string _text; public string Text { get { return _text; } set { if (_text != value) { _text = value; RaisePropertyChanged("Text"); TitleTextChangedMessenger messenger = new TitleTextChangedMessenger { NewText = _text }; // 发布 Messenger.Default.Send<TitleTextChangedMessenger>(messenger); // 这里是为了验证发布&订阅方法的同步,由此可以知道信使可以返回结果,相当于函数调用的返回值 string result = messenger.Result; } } } }
3、前台代码。(其中DataContext的绑定使用Locator,由MVVM Light的ViewModelLocator定位)
<Window x:Class="MVVMLightTutorial.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="350" Width="525" DataContext="{Binding Source={StaticResource Locator}, Path=Main}" Title="{Binding Title}"> <Grid> <TextBox DataContext="{Binding Source={StaticResource Locator}, Path=TitleTextBox}" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"></TextBox> </Grid> </Window>
工程代码:MvvmLightMessengerTutorial.zip
初学WPF,文章仅为参考用,如果有错误,恳请指出!