WPF真入门教程29--MVVM常用框架之MvvmLight

1、MVVM模式回顾 

关于mvvm模式的基础知识,请看这2个文章:

WPF真入门教程23--MVVM简单介绍

WPF真入门教程24--MVVM模式Command命令

做过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开源框架:

1. Prism:Prism是一个由微软模式和实践团队开发的开源框架,它提供了一套用于开发可扩展、可测试和可维护的WPF应用程序的工具和指南。Prism提供了解耦视图、模型和视图模型的机制,以及用于导航、命令、事件聚合等常用功能。

2. Caliburn.Micro:Caliburn.Micro是一个轻量级的MVVM框架,它使用约定优于配置的原则,通过简化开发者的工作流程来提高开发效率。Caliburn.Micro提供了强大的数据绑定、命令绑定、导航和事件聚合等功能。

3. MVVM Light:MVVM Light是一个简化MVVM开发的框架,它提供了一套轻量级的工具和库,包括视图模型的基类、消息传递机制、事件聚合、导航等功能。MVVM Light支持多个平台,包括WPF、UWP、Xamarin等。

4. ReactiveUI:ReactiveUI是一个基于响应式编程的MVVM框架,它使用了Reactive Extensions(Rx)库来处理异步和事件驱动的编程。ReactiveUI提供了一种声明性的方式来处理数据流和交互,使代码更加简洁和可维护。

这些MVVM开源框架都有自己的特点和适用场景,您可以根据自己的需求和偏好选择其中之一来开发WPF应用程序。此外,这些框架都有详细的文档和示例代码,可以帮助您更好地了解和使用它们

3、了解MvvmLight框架

关于MvvmLight框架,Light的意思是指非常快,所以他是一个快速开发MVVM程序,非常轻量化,请看这2个地址

官网:http://www.mvvmlight.net/

源码地址:https://github.com/lbugnion/mvvmlight

简介:可以帮助快速的开发MVVM应用程序(WPF、Xarmarin、UWP、SilverLight),帮助开发将视图与模型分开创建更简洁、易于维护的扩展的应用程序。

MVVMLight框架的优点:

1. 轻量级:MVVMLight框架是一个轻量级的框架,不需要太多的学习和使用成本。

2. 易于使用:MVVMLight框架提供了很多方便的工具和类,可以帮助开发人员快速地实现MVVM架构。

3. 可扩展性:MVVMLight框架是可扩展的,可以根据需要添加自定义的功能和模块。

4. 支持多平台:MVVMLight框架可以用于多个平台,如WPF、UWP、Xamarin等。

5. 社区支持:MVVMLight框架有一个活跃的社区支持,可以获得很多有用的信息和帮助。

MVVMLight框架的缺点:

1. 过于简单:MVVMLight框架虽然简单易用,但有时候可能不能满足复杂的业务需求。

2. 依赖注入不完整:MVVMLight框架的依赖注入功能相对不完整,需要使用第三方库来实现。

3. 缺乏文档和教程:MVVMLight框架的文档和教程相对较少,对于初学者可能不够友好。

4. 对于大型项目不够适用: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的作用

 要将MainViewModelMainWindow绑定起来,只需要在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。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…

如何正确设置CrossOver之偏好设置 crossover软件使用 crossover设定 crossover软件安装

CrossOver的核心是Wine&#xff0c;Wine是一个能在多种POSIX-compliant操作系统&#xff08;如&#xff1a;Linux、Mac OS等&#xff09;上运行Windows应用的兼容层。Wine不是Windows的模拟工具&#xff0c;它是把Windows API 调用翻译成为动态的 POSIX 调用&#xff0c;实现Li…

03 基本指令 1

linux的命令选项都可以同时叠加多个 ls 语法&#xff1a;ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;命令列出该目录下所有子目录与文件。对于文件&#xff0c;列出文件名以及其他信息 常用选项&#xff1a; -a 列出目录下所有文件&#xff0c;包括.开头的…

电子元件分销商

Top 10 Active Electronic Parts Distributors List – 2022 / 2023 一家从众多制造商那里收购所有电子元件并销售给客户的公司被称为电子元件分销商。 A company that acquires all electronic components from numerous manufacturers and sells them to customers from a si…

2024/2/17 图论 最短路入门 dijkstra 1

目录 算法思路 Dijkstra求最短路 AcWing 849. Dijkstra求最短路 I - AcWing 850. Dijkstra求最短路 II - AcWing题库 最短路 最短路 - HDU 2544 - Virtual Judge (vjudge.net) 【模板】单源最短路径&#xff08;弱化版&#xff09; P3371 【模板】单源最短路径&#xf…

Stable Diffusion——文生图界面参数讲解与提示词使用技巧

Clip终止层数 什么是Clip CLIP&#xff08;Contrastive Language-Image Pretraining&#xff09;是由OpenAI于2021年开发的一种语言图像对比预训练模型。其独特之处在于&#xff0c;CLIP模型中的图像和文本嵌入共享相同的潜在特征空间&#xff0c;这使得模型能够直接在图像和文…

thinkphp5.1 phpexcel 批量导入导出

1.批量导入 public function importExcel(){$authority $this->getUserAuthority(order_input, batch_import);if ($authority[code] ! 0) {return json($authority);}$file request()->file(files);if(empty($file)){return printMsg(-1, "请上传文件");}/…

开发技术-Java 获取集合中元素下标并移动至指定位置

1. 说明 某些业务需要特定的元素在列表的最后或者指定位置展示。 2. 代码 import lombok.AllArgsConstructor; import lombok.Data;import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream;Data AllArgsConstructor class Student {St…

CMNet:Contrastive Magnification Network for Micro-Expression Recognition 阅读笔记

AAAI 2023的一篇文章&#xff0c;东南大学几位老师的工作&#xff0c;用于做微表情识别中的运动增强工作&#xff0c; 以下是阅读时记录的笔记。 摘要&#xff1a; However,existing magnification strategies tend to use the features offacial images that include not onl…

喝多少瓶汽水

喝多少瓶汽水 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果: 题目描述&#xff1a; 水已知1瓶汽水1元&#xff0c;2个空瓶可以换⼀瓶汽水&#xff0c;输入整数n&#xff08;n>0&#xff09;&#xff0c;表示n元钱&#xff0c;计算可以多少汽水&a…

【Vuforia+Unity】AR06-空间环境识别功能(AreaTargets)

Vuforia原理:把被识别的物体转成图、立体图、柱形图,3D模型、环境模型,然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容,然后参考模型自动隐藏-发布APP-识别生活中实物-数字内容叠加上去! 不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功…

mybatis-plus 基础使用

1、mybatis-plus 简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 2、特性 1&#xff09;、无侵入&#xff1a…

Nginx知识笔记

一、前言 首先&#xff0c;我们来看一张关于正向代理和反向代理的图片 简单理解正向代理和反向代理的概念&#xff1a; 正向代理&#xff1a;在客户端配置代理服务器(和跳板机功能类似&#xff0c;比如公司很多机器需要通过跳板机才允许登录&#xff0c;正向代理的典型用途是…

【MySQL】数据类型——MySQL的数据类型分类、数值类型、小数类型、字符串类型

文章目录 MySQL数据类型1. 数值类型1.1 tinyint类型1.2 bit类型1.3 小数类型1.3.1 float1.3.2 decimal 2.字符串类型2.1 char2.2 varchar2.3 char和varchar比较2.4 日期和时间类型2.5 enum和set MySQL 数据类型 MySQL 是一个流行的开源关系型数据库管理系统。它支持多种数据类型…

数字滚动实现

介绍 vue-countup-v3 插件是一个基于 Vue3 的数字动画插件&#xff0c;用于在网站或应用程序中创建带有数字动画效果的计数器。通过该插件&#xff0c;我们可以轻松地实现数字的递增或递减动画&#xff0c;并自定义其样式和动画效果。该插件可以用于许多场景&#xff0c;例如展…

展锐S8000安卓核心板参数_紫光展锐5G核心板模块定制方案

展锐S8000核心板模块是基于八核S8000平台开发设计的&#xff0c;采用了先进的6nm EUV制程技术。搭载了全新的智能Android 13操作系统&#xff0c;展现出超强的画面解析能力和高性能双通道MIPI&#xff0c;拥有120Hz高刷新率&#xff0c;独立NPU和3.2TOPS Al算力&#xff0c;同时…

【机器学习】特征工程之特征选择

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

数字化转型导师坚鹏:政府数字化流程管理

政府数字化流程管理 课程背景&#xff1a; 很多政府存在以下问题&#xff1a; 不清楚数字化对流程有什么影响&#xff1f; 不知道政府业流程如何进行优化&#xff1f; 不知道政府业流程优化的具体案例&#xff1f; 课程特色&#xff1a; 有实战案例 有原创观点 …

【README 小技巧】在项目README.md 中展示发布到maven 仓库版本

在项目README.md 中展示发不到nexus 的快照版本 <p align"center"><a target"_blank" href"https://search.maven.org/search?qwu-lazy-cloud-network%20wu-lazy-cloud-network"><img src"https://img-home.csdnimg.cn/ima…

【最新Dubbo3深入理解】Dubbo3源码中的一些小技巧

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…