前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF进阶之MVVM教程(一)

WPF进阶之MVVM教程(一)

作者头像
剑指工控
发布2022-11-14 19:31:45
1.3K0
发布2022-11-14 19:31:45
举报
文章被收录于专栏:剑指工控剑指工控

自写了WPF入门系列(点击学习)文章,收到很多大学生的私信,经常会问一些MVVM的问题,由于自己对MVVM也并不了解,遇到问题也是经常请朋友帮忙看看,趁着业余时间,经过一段时间得学习、开始写MVVM系列的文章,主要写一下自己对MVVM的理解,希望这不仅是对自己成长的记录,也能对同学们有所帮助。

第1讲

MVVM教程(一)

首先说一下概念:

MVVM是Model-View-ViewModel的缩写,具体解释为:

  • Model:现实世界中对象的抽象结果。可以理解为数据模型,对应着一个Class。
  • View:界面。可以理解为界面要做成的样子,对应着XAML文件创作的内容。
  • ViewModel:用来实现业务逻辑。可以理解为是对Model的封装,通过一系列属性暴露Model的状态,提供给View进行显示。

其中的重点是View与ViewModel之间的交互,View中出现数据变化时会尝试修改绑定的目标,同样View执行命令时也会去寻找绑定的Command并执行。反过来,ViewModel在Property发生改变时会发个通知说“名字叫XXX的Property改变了,你们这些View中谁绑定了XXX也要跟着变啊!”,至于有没有View收到是不是做出变化也不关心。ViewModel中的Command脱离View就更简单了,因为Command在执行操作过程中操作数据时,根本不需要操作View中的数据,只需要操作ViewModel中的Property就可以了,Property的变化通过绑定就可以反映到View上。

下面实现一个小的加法计算器为例来学习一下MVVM

首先建立以下几个文件夹其中Bases放一些基类,比如NotifyBase就是放需要数据更改后发送通知的类的基类。

NotifyBase基类继承自INotifyPropertyChanged这个接口,按Alt+Enter引用相应的名称空间(using System.ComponentModel;)再按Alt+Enter实现接口。

为了方便使用,使用RaisePropertyChanged这个方法来对PropertyChanged进行封装,当属性的值发生改变时,来通知View。

同样我们需要一个CommandBase来做命令绑定,同样我们需要继承自ICommand这个接口,按Alt+Enter引用相应的名称空间(using System.Windows.Input;)再按Alt+Enter实现接口。

代码语言:javascript
复制
public event EventHandler CanExecuteChanged;// 当命令可执行状态发生改变时,可激发此事件来通知其他对象。 
public bool CanExecute(object parameter)//在执行之前用来探知命令是否可被执行。
public void Execute(object parameter)//命令执行的方法。    

这里用到Action和Func,相比delegate关键字,使用Action和Func会使代码更简洁。Action和Func两者的区别在于Action没有返回值,而Func有返回值。

新建MainWindow的ViewModel起名叫MainWindowViewModel类

继承自NotifyBase这个基类,并引入using MVVMDemo.Bases;这个命名空间

可以自己添加一个propn这个CodeSnippet(代码片段)

使用propn连续按两下tab键 简化写数据属性的代码 下面建Input1,Input2,Result三个数据属性。

接着写命令绑定 建一个命令属性AddCommand 以及委托具体的执行方法Add 以及在构造函数中实现Add与AddCommand之间得关联。

到此准备工作完成。

命令绑定不好理解,也不好用文字描述 感兴趣得小伙伴可以学习一下刘铁猛老师的深入浅出WPF视频 我也是按照这个视频整理的内容。

就这么简单!

作者简介:

曹言林:加入工控八余载,从事过单片机编程、控制柜接线、设备维修,PLC编程、上位机编程、MES实施。对各方面虽不是专家级别,也愿为工控圈添砖加瓦,贡献自己的一份力量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 剑指工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下面实现一个小的加法计算器为例来学习一下MVVM
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档