MVVM基本基础
Posted weixin_44543308
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM基本基础相关的知识,希望对你有一定的参考价值。
开发工具与关键技术:MVVM
年级:18C#
撰写日期:2021年05月03日
1、MVVM第一层:Model(数据访问)层,第二层:Views(视图层),第三层: ViewModel(视图模型),一个视图要有一个ViewModel,一个ViewModel要有一个Dal(Dal里面是实际的操作代码(业务逻辑))
(1)、MVVM = Model - View - ViewModel
1、为什么要使用MVVM模式
(1)、团队层面:统一思维方式和实现方法(新人与老人的思维一致)
(2)、架构层面:稳定、解耦(UI与业务逻辑分高,橘子皮原理)、富有禅意
(3)、代码层面:可读、可测、可替换
2、什么是Model
现实世界中的对象的抽象结果
3、什么是View和ViewModel
(1)、View = UI
(2)、ViewModel = Model for View (View和ViewModel一一对应,也就是说View要显示什么,ViewModel就要准备什么,View要实现什么操作ViewModel就要相应这种操作)
(3)、ViewModel 与View 的沟通
传递数据(比如:两个数一个数输出值,一个是输入值就是这两个数的和。) —— 数据属性(数据传递依靠的是数据属性和data Binding,传递数据)
传递操作(从界面操作传递回ViewModel,操作要依靠命名属性来实现)
—— 命名属性(传递操作)
2、在WPF中我们的查询事件都是在Loaded事件中加载通过事件来触动,在这里我们要把Loaded事件去掉,因为我们的事件必须要跟后台类文件配合,在后台类中写我们要操作的内容代码实现功能,但是MVVM中的模式就是为了去掉尽量达到页面与业务逻辑层的代码区分开,不用loaded的事件的话,那么我们就要调用执行命令绑定,比如Button按钮在WPF中是用Click事件来调用,但是在MVVM中就用到Command命令来代替Click事件,但是并不是所有的控件都有命令的,在没有Command命令时就要把Command命令转换成EventTrigger触发器在EventTrigger里面本身就有InvokeCommandAction命令方法,而这个触发器可以调用任何的事件的如下图:
但是Interaction要调用一个命名空间是System.Windows.Interactivity.dall在原有的项目中是没有这命名空间的需要我们自主添加引用。
3、ViewModel和 页面控件器是如何绑定呢?如何在页面层调用ViewModel,
有两种方法:一、在类页面里面声明ViewModel就是实例化ViewModel,如下图:
二、就是在页面中写Window.DataContext,还要引用 :
xmlns:i="clr-namespace:WPFMVVM.ViewModel"文件,如下图:
它们的两者之间的区别是:直接在页面中调用ViewModel的话它就能通过事件转到定义,但是在类页面就不行,还有就是在页面写还要必须引用它先对应的文件。
4、Views的逻辑代码是在ViewModel中它们两者的通讯方式是通过DataContext来绑定的,换句话来说就是数据源(获取或设置元素在参与数据绑定时的数据上下文)。
5、Dal:是用来封装实体操作代码(实际操作的是数据库):MVVM增删查改的操作方法跟MVC的增删查改的操作方法差不多(先声明Dal–再实例化Dal–最后调用Dal)
① 在Dal里实例化实体数据模型:MilkTeaMVVMEntities DataContext = new MilkTeaMVVMEntities();
② 查询数据:声明查询方法调用要查询数据的表,然后返回:
③ 新增数据:新增是不需要返回值的,所以跟查询数据有点不同,直接传递新增的操作内容(如果页面能直接获取到当前新增的实体时,那么下面就不需要获取具体的某个值,就可以直接调用Add方法就行了),然后实例化实体添加数据,最后直接保存如下图:
④ 修改数据:修改和新增的区别就是修改多了一步获取ID值,修改传递实体数据来根据它的主键ID筛选出你要修改的那条数据内容–>通过ID获取需要修改的数据–>然后通过CurrentValues.SetValues进行修改,最后保存。
IsModififed:标识新增和修改操作,IsModififed = false是修改数据,IsModififed = true是新增数据
⑤ 删除数据:删除具体一条数据就用Remove,然后保存。
以上是关于MVVM基本基础的主要内容,如果未能解决你的问题,请参考以下文章