WPF入门教程系列五——Window 介绍
WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一)计算机界的顶极大牛们,站在金字塔尖的专家们,发明了模式,并大力推广模式,其目的就是想要达到高内聚低耦合。在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。与WinForm开发相比,我们一般在后台代码中会使用控件的名字来操作控件的各种属性,进行UI更新,而在WPF中通常是通过数据绑定来更新UI;在响应用户操作上,WinForm是通过控件的事件来处理,而WPF可以使用命令绑定的方式来处理,耦合度将降低。
MVVM是Model、View、ViewModel的简写,MVVM的根本思想就是界面和业务功能进行分离,View的职责就是负责如何显示数据及发送命令,ViewModel的功能就是如何提供数据和执行命令。各司其职,互不影响。
(资料图片)
在实际的业务场景中我们经常会遇到客户对界面提出建议要求修改,使用MVVM模式开发,当设计的界面不满足客户时,我们仅仅只需要对View作修改,不会影响到ViewModel中的功能代码,减少了犯错的机会。随着功能地增加,系统会越来越复杂,程序会不停的增加View和ViewModel文件,这样一来会将复杂的界面分离成局部的View,局部的View对应局部的ViewModel,各个不同的功能点可能散落在不同的ViewModel中,每个ViewModel只专注自己职能之内的事情。
理想情况下界面和逻辑是完全分离的,单方面更改界面时不需要对逻辑代码改动,同样的逻辑代码更改时也不需要更改界面。同一个ViewModel可以使用完全不用的View进行展示,同一个View也可以使用不同的ViewModel以提供不同的操作。
使用MVVM架构具有以下优势
1、易维护
2、灵活扩展
3、易测试
4、用户界面设计师与程序开发者能更好的合作
六、下拉框显示省份,实现保存功能本篇文章我们来实现按钮的Click方法也采用绑定的形式,将业务逻辑代码写到业务逻辑类中,而不是写在View的后台cs文件中,这就需要使用Command指令。
在WPF中使用Command指令的步骤如下:
1)创建命令
2)绑定命令
3)设置命令源
4)设置命令目标
WPF中Command指令的核心是继承System.Windows.Input.ICommand接口,所有Command指令对象都实现了此接口。当创建自己的Command指令时,不能直接实现ICommand接口,而是要使用System.Windows.Input.RouteCommand类,该类已经实现了ICommand接口,所有WPF中的Command指令都是RouteCommand类的实例。在程序中处理的大部分Command指令不是RoutedCommand对象,而是RoutedUICommand类的实例,它继承自RouteCommand类。
WPF提供了一个很好的方式来解决事件绑定的问题--ICommand。很多控件都有Command属性,如果没有,我们可以将Command指令绑定到触发器上。接下来我们来先实现一个ICommand接口。ICommand需要用户定义两个方法boolCanExecute和void Execute。第一个方法可以让我们来判断是否可以执行这个命令,第二个方法就是我们具体的命令。
Command--ClickSaveAction1. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标右键单击“WpfGridDemo.NET7”项目,在弹出菜单中选择“添加-->新建文件夹”。 并将“新文件夹”改名为 “Command”。
2. 在Visual Studio 2022的解决方案资源管理器中,使用鼠标右键单击“Command”文件夹,在弹出菜单中选择“添加--> 类”,在弹出的“添加新项”对话框中,选择添加 “SaveCommand”类,这是一个我们要实现的保存操作指令,然后选择“添加”。
3.要实现在按钮的Command上绑定方法,代替Click事件,就需要SaveCommand实现ICommand接口,需要我们自己创建类型去实现接口的CanExecute、Execute、CanExecuteChanged,下面就是实现接口的代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Input; namespace WpfGridDemo.NET7.Command{ public class SaveCommand { ///4.SaveCommand类就是为了在使用命令的时候, 创建一条命令出来用于绑定,这个类型接收两个参数,一个是命令执行的方法,另一个是有返回值的方法, 这个返回值bool用来确定,该条命令是否可以执行,如果命令不能被执行,则按钮的IsEnabled就被会设置成不可点击。 MainWindowVM中创建一个命令/// 命令能否执行 /// readonly Func_canExecute; /// /// 命令执行的方法 /// readonly Action _execute; ////// 命令的构造函数 /// /// 命令需执行的方法 /// 命令是否可以执行的方法 public SaveCommand(Action action, FunccanExecute) { _execute = action; _canExecute = canExecute; } /// /// 判断命令是否可以执行 /// /// ///public bool CanExecute(Object parameter) { if (_canExecute == null) return true; return _canExecute(); } /// /// 执行命令 /// /// public void Execute(Object parameter) { _execute(); } ////// 事件追加、移除 /// public event EventHandler CanExecuteChanged { add { if (_canExecute != null) CommandManager.RequerySuggested += value; } remove { if (_canExecute != null) CommandManager.RequerySuggested -= value; } } }}
1. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标右键单击“WpfGridDemo.NET7”项目,在弹出菜单中选择“添加-->新建文件夹”。 并将“新文件夹”改名为 “ViewModel”。
2. 在Visual Studio 2022的解决方案资源管理器中,使用鼠标右键单击“ViewModel”文件夹,在弹出菜单中选择“添加--> 类”,在弹出的“添加新项”对话框中,选择添加 “MainWindowVM”类,这是一个ViewModel,然后选择“添加”。
3.之前我们已经创建了SaveCommand类,并实现了ICommand接口,下面在MainWindowVM中使用SaveCommand类,创建ClickSaveAction方法。
4.由于此次我们使用的是MVVM模块,无法直接使用界面中的控件DataGrid的属性,我们要将界面中所做的修改的数据保存到数据,则要在MainWindowVM添加一个绑定属性AreaVM,用于接收界面中传递过来的数据。具体如下代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Input;using WpfGridDemo.NET7.Entitys; namespace WpfGridDemo.NET7.ViewModel{ public class MainWindowVM { private Area m_Area; ////// 员工数据 /// public Area AreaVM { get { return m_Area; } set { m_Area = value; } } ////// 命令要执行的方法 /// void SaveExecute() { try { GridDbContext db = new GridDbContext(); var list=db.Area.AsTracking().ToList(); Area modifyArea = list.Where(x=>x.Id==AreaVM.Id).FirstOrDefault(); if (modifyArea != null) { modifyArea.Name = AreaVM.Name; modifyArea.Updated = DateTime.Now; db.SaveChanges(); } } catch (Exception ex) { throw ex; } } ////// 命令是否可以执行 /// ///bool CanSaveExecute() { return true; } /// /// 创建新命令 /// public ICommand ClickSaveAction { get { return new Command.SaveCommand(SaveExecute, CanSaveExecute); } } }}
注意,创建这个新的命令的名字需要和我们界面按钮Command中绑定的名字一致,叫ClickSaveAction。
标签:
在WPF开发中,经典的编程模式是MVVM,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文
5、补充维生素:眼皮跳也可能是维生素缺乏,可以适当补充一些维生素A胶囊、维生素B片或胡萝卜素等。不过这
不过除了吴少聪之外,主教练埃姆雷也选择给了其他几名年轻球员机会,17岁的守门员迪尔曼和19岁的中场艾多姆
1、新疆文博昌盛贸易有限公司于2013年01月21日成立。2、法定代表人邱松,公司经营范围包括:销售:医疗器械
1、可以的,只要选中你要进行分页的行,然后再选“插入”——“分页符”,系统就会在你选中的行上方自动...
正在新加坡出席第20届香格里拉对话会的中国国防部长李尚福今天发表题为中国的新安全倡议的演讲。关于台湾问
出差半年,“圆梦乘组”费俊龙、邓清明、张陆完成了首次“太空会师”,刷新了单个乘组出舱活动纪录,在...
1、《求索》是浙江人民出版社出版的图书。2、作者是潘建中 著。文章到此就分享结束,希望对大家有所帮助。
费俊龙连说3个很好今天的热度非常高,现在也是在热搜榜上了,那么具体的费俊龙连说3个很好是什么情况呢,大
今天小编肥嘟来为大家解答以上的问题。我国第一颗原子弹是无线电引爆吗,我国第一颗原子弹相信很多小伙伴还
1、TWAG-MAM2-GLVV-12K9-HMA6-PAXL。本文到此分享完毕,希望对大家有所帮助。
1、如用人单位没有以书面形式将《赏罚通知》告知劳动者,或者不能提供《赏罚通知》已送达予劳动者的证据,
2023年全国高考于6月7日(周三)至8日(周四)举行,考试开始前、结束后各考点周边路段预计会发生短时高峰流,
1、馔zhuàn简体部首:饣总笔画:15笔顺编码:撇折折折横折折横折横竖竖横撇捺解释:1 饮食,吃喝:盛(shèng
今天小编岚岚来为大家解答以上的问题。党的权利和义务有几条,党的权力和义务相信很多小伙伴还不知道,现在
1、骶髂关节(sacroiliacjoint骶髂音[dǐqià])由骶骨与髂骨的耳状关节面相对而构成。2、关节囊紧张
1、这上面用的就是mmd的。2、你以为还会为了这个软件专门去做专属的模型啊!大多数都是可以用的。本文到此
1、秦裕的情人都有谁,请看秦裕与情人的故事,2006年初。2、原上海市政府办公厅副秘书长、后任宝山区区长的
想必现在有很多小伙伴对于爱薛方面的知识都比较想要了解,那么今天小好小编就为大家收集了一些关于爱薛方面
1、凉宫修改器使用前必读:(张玄操原创,引用请注明原作者)凉宫修改器程序需要Microsoft NETFramewo
X 关闭
X 关闭