1、MVVM模式回顾
关于mvvm模式的基础知识,请看这2个文章:
做过VUE开发或微信小程序开发的伙伴,就知道MVVM模式,核心就是数据驱动控件,全栈开发人员更是知道什么是前后端分离技术,在windows开发中的WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI。使用MVVM架构具有以下优势:1、易维护 2、灵活扩展 3、易测试 4、用户界面设计师与程序开发者能更好的合作。
此图能较好地说明MVVM架构思想
MVVM中,各个部分的职责如下:
**Model:**负责数据实体的结构处理,与ViewModel进行交互;
**View:**负责界面显示,与ViewModel进行数据和命令的交互;
**ViewModel:**负责前端视图业务级别的逻辑结构组织,并将其反馈给前端
2、MVVM开源框架介绍
在WPF中,有几个常用的MVVM(Model-View-ViewModel)开源框架,这些框架提供了方便的工具和模式来帮助开发人员实现MVVM架构。以下是几个常用的MVVM开源框架:
-
Prism:Prism是一个由微软模式和实践团队开发的开源框架,它提供了一套用于开发可扩展、可测试和可维护的WPF应用程序的工具和指南。Prism提供了解耦视图、模型和视图模型的机制,以及用于导航、命令、事件聚合等常用功能。
-
Caliburn.Micro:Caliburn.Micro是一个轻量级的MVVM框架,它使用约定优于配置的原则,通过简化开发者的工作流程来提高开发效率。Caliburn.Micro提供了强大的数据绑定、命令绑定、导航和事件聚合等功能。
-
MVVM Light:MVVM Light是一个简化MVVM开发的框架,它提供了一套轻量级的工具和库,包括视图模型的基类、消息传递机制、事件聚合、导航等功能。MVVM Light支持多个平台,包括WPF、UWP、Xamarin等。
-
ReactiveUI:ReactiveUI是一个基于响应式编程的MVVM框架,它使用了Reactive Extensions(Rx)库来处理异步和事件驱动的编程。ReactiveUI提供了一种声明性的方式来处理数据流和交互,使代码更加简洁和可维护。
这些MVVM开源框架都有自己的特点和适用场景,您可以根据自己的需求和偏好选择其中之一来开发WPF应用程序。此外,这些框架都有详细的文档和示例代码,可以帮助您更好地了解和使用它们
3、了解MvvmLight框架
关于MvvmLight框架,Light的意思是指非常快,所以他是一个快速开发MVVM程序,非常轻量化,请看这2个地址
源码地址:https://github.com/lbugnion/mvvmlight
简介:可以帮助快速的开发MVVM应用程序(WPF、Xarmarin、UWP、SilverLight),帮助开发将视图与模型分开创建更简洁、易于维护的扩展的应用程序。
MVVMLight框架的优点:
-
轻量级:MVVMLight框架是一个轻量级的框架,不需要太多的学习和使用成本。
-
易于使用:MVVMLight框架提供了很多方便的工具和类,可以帮助开发人员快速地实现MVVM架构。
-
可扩展性:MVVMLight框架是可扩展的,可以根据需要添加自定义的功能和模块。
-
支持多平台:MVVMLight框架可以用于多个平台,如WPF、UWP、Xamarin等。
-
社区支持:MVVMLight框架有一个活跃的社区支持,可以获得很多有用的信息和帮助。
MVVMLight框架的缺点:
-
过于简单:MVVMLight框架虽然简单易用,但有时候可能不能满足复杂的业务需求。
-
依赖注入不完整:MVVMLight框架的依赖注入功能相对不完整,需要使用第三方库来实现。
-
缺乏文档和教程:MVVMLight框架的文档和教程相对较少,对于初学者可能不够友好。
-
对于大型项目不够适用:MVVMLight框架适合小型和中型项目,但对于大型项目可能不够适用。
总之,MVVMLight框架是一个轻量级、易于使用、可扩展和支持多平台的框架,但对于复杂的业务需求和大型项目可能不够适用,而且缺乏文档和教程。
MVVM Light框架的核心是ViewModelBase类,它实现了INotifyPropertyChanged接口,用于通知视图层数据的变化。此外,MVVM Light还提供了一些实用的类和工具,如Messenger类用于跨ViewModel传递消息,Command类用于处理用户交互事件等。
MVVMLight的作者Laurent Bugnion 是个微软MVP,有趣的是,MVVMLight的产品Logo是一根羽毛,寓意了他的优点:轻量、专业、高效。
4、获取MvvmLight框架
1、创建项目
2、在Nuget中搜索MvvmLight进行安装
注意看项目文件目录的变化
安装完成后,在项目目录里自动生成了ViewModel文件夹,生成两个文件,一个MainViewModel.cs可以作为MainWindow的viewModel,另一个ViewModelLocator.cs作为ViewModel定位器,通过Ioc容器,在改文件中获取ViewModel的实例。
打开ViewModelLocator.cs文件,发现文件
中有报错,这时只需要
删除using Microsoft.Practices.ServiceLocation;这句话,然后
重新引用using CommonServiceLocator;
快速操作,把错误先消除
3、App.xaml文件的变化
在App.xaml
中增加了一个Locator,可以作为静态资源使用,用于后面绑定
所以注意:第一次添加时,需要自己处理两个异常,一个是删除引用,一个是添加引用
5、MvvmLight框架基础库
1、GalaSoft.MvvmLight.dll
主要命名空间:
GalaSoft.MvvmLight:最顶层的命名空间,MvvmLight的主体,核心功能 主要对象:ObservableObject、ViewModelBase(实现数据通知相关的内容)、ICleanup
GalaSoft.MvvmLight.Command:主要包含依赖命令的定义 主要对象:RelayCommand、RelayCommand<> 对Icommand的封装
GalaSoft.MvvmLight.Helpers:框架辅助类,供框架内部使用
GalaSoft.MvvmLight.Messaging:消息类,提供全局的消息通知,可以理解为全局的Event事件, 主要对象:Messenger、 NotificationMessage
GalaSoft.MvvmLight.Views:与应用里面的View紧密结合 主要对象:IDialogService、 INavigationService
2、GalaSoft.MvvmLight.Extras.dll
主要命名空间:GalaSoft.MvvmLight.IoC:依赖注入使用的容器 主要对象: ISimpleIoc、SimpleIoC实现
3、GalaSoft.MvvmLight.Platform.dll
主要命名空间: GalaSoft.MvvmLight.Command 主要对象:事件绑定时候,需要传递事件参数EventArgs:EventToCommand GalaSoft.MvvmLight.Threading 主要对象: DispatcherHelper
6、MvvmLight基本对象介绍与使用
1、框架对象ViewModelLocatorr的作用
要将MainViewModel
和MainWindow
绑定起来,只需要在MainWindow
上增加绑定DataContext="{Binding Source={StaticResource Locator},Path=Main}"
,如下所示
2、绑定测试
给界面增加一些控件,一个textblock,一个textbox,一个button
viewmodel绑定
将代码改成这样
3、新ViewModel绑定
1、创建一个新的窗体
2、添加viewmodel,AirViewModel
ICommand和RelayCommand类型的命令都可以,RelayCommand是ICommand的实现类
3、添加样式资源
4、ViewModelLocator.cs修改
注册了容器实例对象后,才可以在xaml文件中指定
5、修改mainviewmodel代码
6、启动程序
RaisePropertyChanged
实现了基本INotifyPropertyChanged
接口基本的属性变化推送,命令动态更新前台的数据,这就是MVVM,这就是MVVMLIGHT。