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