MVVM基本基础(2)
开发工具与关键技术:MVVM、基本基础 (2)
撰写时间:2021-05-17
1、在MVVM中的Command命令:使用Command命令有四个步骤:创建命令、绑定命令、设置命令源、设置命令目标
2、在实现ViewModel时要引用两个公共类:ViewModelBase类 和 DelegateCommand类是必须要引用的,一般的情况下这两个类都是封装好的直接用就可以了。
① ViewModelBase:里面主要是封装一些公共的属性、构造函数和类的成员
② DelegateCommand:视图模型委托命令,里面主要应用ICommand命令
3、ViewModel:是我们页面的一个类会用到一个公共类ViewModelBase:
① 在里面一定要写构造函数,构造函数名称一定要和ViewModel类名称要一致,如果不一致的话它就不是构造函数了,在构造函数里主要是写注册命令
② CommandInit:命令初始化,把我们需要的一些方法都封装在里面:这有四个命令如下,
ICommand声明命令命令它是个自属性:
(1)查询(刷新)命令:Public ICommand RefreshCommand{get;set;}
(2)新增命令:Public ICommand AddCommand{get;set;}
(3)修改命令:Public ICommand UpdateCommand{get;set;}
(4)删除命令:Public ICommand DeleteCommand{get;set;}
(5)保存命令:Public ICommand SaveCommand{get;set;}
通过这四个命令代替了我们之前的四个事件,有了命令我们就可以定义它们的具体方法,例如:调用查询方法:通过命令的方式来绑定具体的操作方法,那么命令绑定方法那么就要出现方法名,如果不给方法名的话就不知道命令绑定是哪个方法了。
命令执行方法:声明Dal ,先声明Dal–再实例化 --最后调用,调用方法前要写接收的方法,用属性来接收数据,有几个属性:
(1)声明Dal:public ProductCategoryDal productCategoryDal = null;
(2)专门声明一个属性来接收属性列表(查询数据):下图的第一个是只是用来接收数据,第二个是用属性来获我们的数据(获取列表,当我们的数据源发生改变的时 候会调用OnPropertyChanged来触发属性发生变更事件,一旦数据发生变化就要把数据源ProductTypes进行刷新)
然后到命令执行方法中调用ProductTypes来接收数据属性:
最后在CommandInit中绑定命令并设置命令源,再到构造函数中调用,如下:
4、DataGrid表格:
(1)、ItemsSource:绑定数据源是列表给定的数据源ProductTypes,然后列表里面的具体属性名称就根据你数据库里面的属性名称一致就可以了
(2)、SelectedItem:具体选中某一行数据,就设置一个选中的某个属性如SelectedItem=“Binding SelectProductTypeEntity”
5、页面控件绑定:以前绑定页面是在后台通过前台控件给X:name属性,然后在通过name的属性来获取,现在就不是这样操作,是通过获取文本内容,写法是通过binding属性直接获取具体的属性操作,在这里是通过双向绑定:Text="{Binding CurrentProductTypeEntity.productCode,Mode=TwoWay}"
6、新增/修改数据:新增和修改都是要新增或修改一条数据对应实体,也有特定的属性属性它在这里是做新增和修改,所以它不是列表而是具体操作的实体,如下实例化实体:
声明Dal,在这里Dal就不需要实例化了:
public ProductCategoryDal ProductCategoryDal { get; set; }
然后在页面上声明一个属性(bool属性是用来区分什么时候新增、什么时候修改的,新增是true、修改时false(看你自已如何给),也不一定是要用bool类型的,也可以用int类型来用数字1代表新增、数字2代表修改),如下:
不管是列表还是实体属性的写法都是一样的。
7、命令:定义保存命令:Public ICommand SaveCommand{get;set;},有了保存的命令就会要保存的方法(执行命令的方法),不管是保存新增还是修改都是保存实体,所以先实例化一个实体–>获取实体(是获取控件上的页面内容,我们的控件内容是用了一个实体(CurrentProducTypeEntity)接收,注意:你页面上的文本框中的Text=“{Binding …(这个位置)}”一定要跟我们在ViewModel中定义好的实体属性要保持一致)–>判断它是新增还是修改,如果是true就新增否则就修改(修改时还多一步获取要修改的ID值)–>最后到构造函数中写注册命令,如下:
8、ComboBox下拉框:ItemsSource:指定绑定数据源实际接收一个表格的实体数据,DisplayMemberPath:具体的显示值,SelectedValuePath:具体选中值。
MVVM基本基础(2)相关推荐
- MVVM框架原理浅谈
MVVM基本原理 MVVM(Model-View-ViewModel)本质上就是MVC 的改进版,MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开. #merma ...
- WPF快速入门系列(8)——MVVM快速入门
一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...
- [Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源
最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档.在 MVVM 出现后十多年,我在不同的场合见到过多种 M ...
- Silverlight中使用MVVM(9)-绑定Enum类型数据
Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)-提高 Silverlight中使用MVVM(3)-进阶 Silverlight中使用MVVM(4)-演练 ...
- Mvvm Light Toolkit 入门
原文:Mvvm Light Toolkit 入门 前言 之前学习UWP的时候就一直看到有关MVVM的资料但是一直没有系统的去学,最近正好有时间,特地来攻破这个点,顺便学习一下VS与GitHub的链接和 ...
- wpf mvvm框架_[Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源
最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档.在 MVVM 出现后十多年,我在不同的场合见到过多种 M ...
- 架构演进|研究mvp到mvvm(传统架构mvvm和Jetpack下的区别)
mvp.mvvm架构演进|研究 MVP架构实现 定义数据结构类型 MVP架构改进--反射获取泛型类型实例 MVVM架构基础 配置DataBinding 添加Jetpack组件 MVVM架构下的项目层次 ...
- iOS 分析MVC、MVP、MVVM、VIPER
天天说MVC,尤其对于做iOS开发的,更是口头禅,因为Apple已经为我们量身定制了适合iOS开发的MVC架构.那么什么是MVC? 对于iOS的程序猿来说,MVC人人都说自己会用,但是呢实际开发过程中 ...
- Android——超简单 MVC、MVP、MVVM入门系列
2022年,新年第一篇文章,本篇文章将用非常简单的言语来描述各框架,尽量让大家一看即会. 前言: 相信不少伙伴在进行Android开发的时候,肯定遇见过 Activity 代码上千行的,这种代码非常难 ...
最新文章
- brew安装mysql 卸载_Ubuntu环境下MySQL卸载安装配置远程访问三步曲
- 数据结构:栈实现逆波兰计算器
- kafka同一个gruopid下多个consumer订阅同一个topic,只有一个consumer能消费到数据
- java处理文件路径windows与linux兼容问题
- 字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器
- Java开发常识资料
- arch linux系统安装教程,Arch Linux系统的安装(BIOS)教程,archlinux
- 职业生涯最差绩效:M-
- 认识下这位全能型漏洞猎人
- oracle 存储过程记录
- IE6下解决select层级高的问题
- springboot+Vue在线考试系统
- 《数字电子技术基础》5.1 触发器概述、5.2 SR锁存器
- 第一次跳槽总结(产品经理,简历面试)
- java查询ip归属地
- 华为freelance耳机充不进电修理
- WhatsApp的下载与更新
- 希尔排序的时间复杂度为什么能小于O(n^2)
- python朋友圈点赞_python(html 点赞+1)
- SpringBoot+百度云API 实现人脸识别功能
热门文章
- AutoFDO自动反馈式优化
- Turbo码:3GPP TS 36.212
- 获取Linux终端大小及像素值
- c语言qsort函数源码,qsort源代码分析
- Django主从数据库分离配置
- arch linux 进入黑屏,无法从Arch Linux进入Beaglebone Black
- centos7安装xterm_CentOS 7使用x-manager中Xstart工具报缺少xterm包错误
- 偷的名表卖掉能查到吗_搬运工偷走房主30万名表,转手以12.5万卖掉 南京警方快速追回...
- 非标自动化企业前十名_企业动态 | 瑞弗机电:全链条拓展“非标定制” 量身定制自动化生产线...
- c语言判断字符串中是否包含非数字,【新手】【求思路】如何判断用户输入的字符串中是否含有非数字?...