嗯本文将结合具体代码帮助读者快速上手MvvmLight,我们希望读者已经了解Mvvm/DI/IoC的相关知识
MvvmLight快速上手
最近仍然在学习一些包的用法,这次分享关于MvvmLight的相关用法
关于Mvvm您需要知道
如果您是第一次接触Mvvm,请参考这篇文章,Mvvm的目的和具体方法在上面都有提及,在我们具体实现上,我们只需要注意逻辑分层,使用如上图合理的手段来联系层与层间就好了。
关于依赖注入和控制反转容器您需要知道
您可以参考这篇中文文章控制反转(IoC)与依赖注入(DI),我们说DI/IoC都是为了降低程序的耦合度,如果您对耦合度还没有感觉的话,可能是您代码写得太少,或者您使用某些编程技巧巧妙的避开了这个问题,不管怎样,能解决问题都是好的。
关于MvvmLight您需要知道
这里以这个系列的教程为叙述参考来说一下MvvmLight的主要功能
ViewModelBase && ObservableObject
嗯这个我们懂的,就是提供一个更新提醒的接口。
RaisePropertyChanged(() => Name);
ViewModelLocator && SimpleIoc
嗯这个就是所谓的IoC容器了我们可以把ViewModel和Server在里面register,然后以后就可以直接getinstance了
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<AppViewModel>();
RelayCommand
嗯这个就是和XAML绑定的Command了
如果XAML是事件怎么办?嗯你需要使用EventToCommand解决方法 如
<CheckBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<command:EventToCommand Command="{Binding CheckedCommand}"></command:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<command:EventToCommand Command="{Binding UnCheckedCommand}"></command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
说起来这个i可能需要额外装包呢。
Messenger
嗯这个就是最重要的消息机制的了,总之一个地方注册一个处理方法,然后就可以消息传递了。
Messenger.Default.Register<string>(this, MessageToken.SendMessageToken, (msg) =>
{
Msg = msg;
});
// token 大概只是个确定特定接受方的字符串
Messenger.Default.Send<string>(Msg, MessageToken.SendMessageToken);
DispatcherHelper
嗯这个就是我们非UI线程与UI线程通信用的了,大概就是在app.cs里面初始化,然后在需要的时候调用接口就好。
DispatcherHelper.Initialize();
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Teacher.Students.Add(new Student()
{
Name = "LaoLi",
Age = 25
});
});
后记
就像在一开始说的,本文需要读者预先对一些知识有一定了解,MvvmLight提供了MVVM模式下编程的很多需要使用的模式/解决方案的封装,如果读者本身对MVVM了解就不够多,那么可能看起来就有点云里雾里。