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框架使用入门(一)的更多相关文章

  1. MvvmLight框架使用入门(四)

    本篇我们着重介绍ViewModelBase,演示Set和RaisePropertyChanged方法的使用,以及就Cleanup方法释放资源展开讨论. ICleanup 接口.实现该接口的ViewMo ...

  2. MvvmLight框架使用入门(三)

    本篇是MvvmLight框架使用入门的第三篇.从本篇开始,所有代码将通过Windows 10的Universal App来演示.我们将创建一个Universal App并应用MvvmLight框架. ...

  3. MvvmLight框架使用入门(5)

    上一次写MvvmLight框架使用入门(4)的时候还在用Visual Studio 2015,我儿子也不会过来盖上我的XPS……重启这个系列一方面是因为最近又开始写UWP的东西了,另一个是因为Mvvm ...

  4. MvvmLight框架使用入门(二)

    上一篇我们简单对MvvmLight做了介绍.罗列了三个DLL中,各个命名空间下主要类的定义及大致作用.因为只是范范的概论,对于从未接触过MvvmLight的萌新来说,根本就是在晃点他们.不过万事开头难 ...

  5. MVVMlight框架应用:Data Binding、Command

    常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的:在MVVMLight框架里,这里我们定 ...

  6. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  7. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  8. Spring.NET依赖注入框架学习--入门

    Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...

  9. 通过Nuget添加Mvvmlight框架发生错误

    IDE:Visual Studio 2013 场景:通过Nuget添加Mvvmlight框架 具体错误: 解决办法:删除Nuget,然后添加新版本的Nuget Package Manager 具体操作 ...

随机推荐

  1. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...

  2. 内存的分配VS回收&构造函数VS析构函数

    之前有一个问题一直困扰着我,就是一个变量出了作用域,我以为这个变量的内存就被回收了,其实不是这样的,昨天问了一个高手,才豁然开朗,自己在看相关代码的反汇编代码,才知道原来真是这样就.这个问题,我想简单 ...

  3. VMware安装RedHat Linux虚拟机图文详解

    创建Red Hat Linux虚拟机 1.打开VMware,开始创建虚拟机 点击菜单[文件]->[新建虚拟机]. 2.默认典型,单击[下一步] 3.选择安装来源 在这里,我们选择安装来源为[安装 ...

  4. 将自己写的windows服务加入到windows集群中

    最近发现windows集群能进行很多自定义,比如在集群中加入自己编写的服务. 能自定义的可不少,截个图: 本次演示中,只想用“通用服务”这个类型. 先列下步骤 编写一个记录时间的Windows服务,这 ...

  5. 初始zookeeper与集群搭建实例

    zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...

  6. Linux 统计某个字符串出现的次数

    要统计一个字符串出现的次数,这里现提供自己常用两种方法: 1. 使用vim统计 用vim打开目标文件,在命令模式下,输入 :%s/objStr//gn 即可 2. 使用grep: grep -o ob ...

  7. Ehcache 使用

    自从Ehcache 到了1.2+的版本,就支持分布式缓存了 Spring + Hibernate的结构 ,ehcache的对这几个框架的支持较好,就采用这个缓存方案 下面是配置文件: <ehca ...

  8. file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did

    file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did 解决办法 ,如果你是用的服务器,可以参考这个办法,修改 ...

  9. winform c#绑定combobox下拉框 年度代码。

    winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange("});//邦定数据 comboBox1.Text = DateTime.Now ...

  10. 配置Tomcat的访问日志格式化输出

    博客搬家,本文新地址:http://www.zicheng.net/article/9   本文描述如何配置tomcat的访问日志,按我们的要求输出指定的日志格式. 且在Nginx+Tomcat的配置 ...