MvvmLight框架使用入门(一)
MvvmLight是比较流行的MVVM框架,相对较为简单易用。可能正因为简单,对应的帮助文档不多,对初学者就不够友好了。这里会用几篇随笔,就个人对MvvmLight的使用经验,来做一个入门的介绍。
第一步我们先找到并下载MvvmLight的最新版,我个人倾向使用NuGet。这里顺便吐槽一下,MvvmLight貌似并未在Github上创建项目,虽然作者对MS深深的爱让我感动,不过也不要排斥非MS系的东西嘛(喂,你自己还不是一样……)
VS2015 Community版,打开NuGet搜索MVVM,第一个就是。什么什么你还在用盗版!!还在搜Key!!Community版不要钱!不要钱!不要钱!重要的事情说三遍!!!而且功能甩以前的Express版十条街,完全可以正常开发使用(三哥CEO这一点还是做的不错的,崽卖爷田不心疼?)。

随便你下第一个MvvmLight,还是第二个MvvmLightLibs,后者是纯内裤类库。反正我们今天只介绍纯内裤类库。(前者会多帮你建一个MainPage的ViewModel,并创建好Binding啥的,俺们以后再说)
MvvmLight的本体一共有三个DLL:GalaSoft.MvvmLight.dll,GalaSoft.MvvmLight.Extras.dll和GalaSoft.MvvmLight.Platform.dll。另外依赖微软的一个DLL:Microsoft.Practices.ServiceLocation.dll(这货SimpleIoc要用到,不是俺们讨论的重点)
以下是本篇的精华,可能解释的还不够细致全面,但这不是第一篇么,后面几篇再做更为详细的介绍,举个例子敲段代码解释啥的。
GalaSoft.MvvmLight.dll程序集,包含5个命名空间:
Namesapce GalaSoft.MvvmLight:最顶层的命名空间,包含了MvvmLight的主体,最核心的功能都在这里 。
|
ICleanup |
接口。实现该接口的ViewModel需要在Cleanup方法里释放资源,特别是 -= event |
|
ObservableObject |
该类实现了INotifyPropertyChanged接口,定义了一个可通知的对象基类,供ViewModelBase继承 |
|
ViewModelBase |
继承自ObservableObject, ICleanup。将作为MvvmLight框架下使用的ViewModel的基类。主要提供Set和RaisePropertyChanged供外部使用。同时会在Cleanup方法里,Unregister该实例的所有的MvvmLight Messenger(在GalaSoft.MvvmLight.Messaging命名空间定义) |
Namesapce GalaSoft.MvvmLight.Command
|
RelayCommand |
提供了一个ICommand接口的实现 |
|
RelayCommand<T> |
提供了ICommand接口的泛型实现 |
Namesapce GalaSoft.MvvmLight.Helpers。MvvmLight框架内部使用的一些辅助类,框架的使用者不直接接触该命名空间。
Namesapce GalaSoft.MvvmLight.Messaging。消息类命名空间,提供全局的消息通知。可以简单理解为全局的event事件,后面会花一些篇幅讲解使用。
Namesapce GalaSoft.MvvmLight.Views。和View结合较紧密,ViewModel通过依赖该命名空间下的类,来避免直接引用View,用以解耦代码对具体的平台的依赖。
|
IDialogService |
对系统弹框消息的抽象。针对具体平台会在GalaSoft.MvvmLight.Platform程序集里分别实现 |
|
INavigationService |
对页面导航的抽象,不同平台会有不同的实现 |
GalaSoft.MvvmLight.Extras程序集,仅包含1个命名空间:
Namesapce GalaSoft.MvvmLight.Ioc 。依赖注入使用的容器放在这个命名空间。
|
ISimpleIoc |
接口,IOC(Inverse Of Control)控制反转,我比较喜欢说依赖注入(Dependency Injection),简单可以理解为一个托管的容器,替你创建和管理对象。在MVVM中,一般是ViewModel |
|
PreferredConstructorAttribute |
该类继承自Attribute,不常用。当ViewModel存在一个以上的构造函数时,可以通过他来指定SimpleIoc默认调用的构造函数 |
|
SimpleIoc |
ISimpleIoc接口的实现。功能简单实用 |
GalaSoft.MvvmLight.Platform程序集,依赖平台具体实现的功能会放到这个程序集里,包含2个命名空间:
Namesapce GalaSoft.MvvmLight.Threading
|
DispatcherHelper |
非UI线程操作UI线程时用到的帮助类,已针对各平台不同的写法做了封装。 |
Namesapce GalaSoft.MvvmLight.Views
|
DialogService |
IDialogService接口的实现 |
|
NavigationService |
INavigationService接口的实现 |
MvvmLight框架使用入门(一)的更多相关文章
- MvvmLight框架使用入门(四)
本篇我们着重介绍ViewModelBase,演示Set和RaisePropertyChanged方法的使用,以及就Cleanup方法释放资源展开讨论. ICleanup 接口.实现该接口的ViewMo ...
- MvvmLight框架使用入门(三)
本篇是MvvmLight框架使用入门的第三篇.从本篇开始,所有代码将通过Windows 10的Universal App来演示.我们将创建一个Universal App并应用MvvmLight框架. ...
- MvvmLight框架使用入门(5)
上一次写MvvmLight框架使用入门(4)的时候还在用Visual Studio 2015,我儿子也不会过来盖上我的XPS……重启这个系列一方面是因为最近又开始写UWP的东西了,另一个是因为Mvvm ...
- MvvmLight框架使用入门(二)
上一篇我们简单对MvvmLight做了介绍.罗列了三个DLL中,各个命名空间下主要类的定义及大致作用.因为只是范范的概论,对于从未接触过MvvmLight的萌新来说,根本就是在晃点他们.不过万事开头难 ...
- MVVMlight框架应用:Data Binding、Command
常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的:在MVVMLight框架里,这里我们定 ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...
- Spring.NET依赖注入框架学习--入门
Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...
- 通过Nuget添加Mvvmlight框架发生错误
IDE:Visual Studio 2013 场景:通过Nuget添加Mvvmlight框架 具体错误: 解决办法:删除Nuget,然后添加新版本的Nuget Package Manager 具体操作 ...
随机推荐
- 重装windows7企业版时提示“安装程序无法创建新的系统分区,也无法定位现有系统
第一步:把win7镜像发在你电脑的非系统盘的其他硬盘上. 第二步:重启机器,通过U 盘启动.进入win pe系统,关于这点我说一下,有些朋友也许不知道什么叫win pe系统,这个win pe 究竟有什 ...
- 【转】Xcode 6制作动态及静态Framework
http://years.im/Home/Article/detail/id/52.html 创建iOS动态库 新建工程并选择默认Target为Cocoa Touch Framework, 如图: 做 ...
- nginx 重写 rewrite 基础及实例
nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f和!-f用来判断是否 ...
- https SSL主流数字证书都有哪些格式?
主流数字证书都有哪些格式? 一般来说,主流的Web服务软件,通常都基于两种基础密码库:OpenSSL和Java. Tomcat.Weblogic.JBoss等,使用Java提供的密码库.通过Java的 ...
- 1.C#中几个简单的内置Attribute
阅读目录 一:Obsolete 二:Conditional 一:Obsolete 这个内置属性是说这个方法废弃了不可用,它有两个参数,第一个参数message是说废弃的原因,第二个参数err ...
- 阅读《Effective C++》系列
<Effective C++>条款07:为多态基类声明virtual析构函数 这样做主要是为了防止内存泄漏,见我hexo博客. C++的虚析构函数 <Effective C++> ...
- PL/SQL Developer去掉启动时自动弹出的Logon弹出框方法
以前用PL/SQL Developer 7.0版本,最近升级到PL/SQL Developer 11.0版本,但每次启动PL/SQL Developer都会自动弹出Logon窗口,并且选中其中的登录历 ...
- Gson整合Volley返回对象--GsonRequest
Gson是一个使用映射支持JSON与Java对象之间相互转换的库文件.你可以定义和JSON keys相对应名称的Java对象.把对象传递给传递Gson,然后Gson会帮你为对象填充字段值. 下面是一个 ...
- JAVA IO NIO
http://www.cnblogs.com/handsome1013/p/4882862.html http://www.cnblogs.com/dolphin0520/ http://www.cn ...
- mshadow笔记
矩阵维度表示和正常相反. a[2][3],行2列3,a.shape.shape_[0]=3,a.shape.shape_[1]=2. pred.Resize( Shape2( batch_size, ...