WPF:MVVM的由来与属性绑定的过程
1、MVVM
(1)MVVM是什么?
MVVM(Model-View-ViewModel)是一种软件架构设计模式MVVM模式。有助于分离应用程序的业务逻辑和用户界面层,使得开发过程更易于管理,同时也便于单元测试。
Model?
现实世界中对象的抽象结果。
View?
View=UI。
View Model?
ViewModel=Model for View。
View 与 View Model之间的沟通:传递数据:数据属性 传递操作:命令属性。
(2)为什么要使用MVVM?
- 可测试性:由于业务逻辑被封装在ViewModel中,这使得编写单元测试变得更容易。
- 解耦:View和Model之间通过ViewModel间接通信,使得它们彼此独立,易于单独修改和维护。
- 可维护性:清晰的分层结构使得代码更易于理解和维护。
2、数据绑定
现在我们做一个实验,实现一个简单的加法,通过MVVM去实现。
从图中可以看出,有3个数据属性和2个命令属性。
先创建好各层文件夹如下:
对于数据属性,我们先创建一个NotificationObject类,去继承INotifyPropertyChanged这个接口,这个接口用来是实现UI与数据属性之间双向绑定的。
对于命令属性,我们先创建一个DelegateCommand类,继承ICommand这个接口。
ViewModel里面的代码如下:
结果如下:
3、分析
如何执行数据属性呢?(ViewModel与View之间双向交互)
数据绑定的过程,INotifyPropertyChanged里面接口是用来干嘛的?
当我们在UI层里面输入1时(此时对应的值已经传到了Input1了),这个时候会执行属性对应的Set里面的方法
然后执行方法里面的事件,将这个属性名字传递到UI,然后UI绑定的对应的属性就随之改变
也就是说:Input1和Inpu2我们只是通过UI去传值,所以我们并不需要去执行RaisePropertyChanged这个方法。于是,当我注释掉里面的RaisePropertyChanged方法时,经过调试与实验,依然可以显示结果。这个过程是从View到ViewModel的过程。
再来说Input3,这个为什么不可以去掉RaisePropertyChanged这个方法呢?因为当我们去执行命令后,Input3在ViewModel里面的值进行了改变,然后通过事件触发通知UI,传递给相对应的属性名字,这样UI层的值就改变了。这个过程是View Model到View的过程。
如何执行命令属性呢?(View到ViewModel)
我们知道,在MainWindow里面我们需要将xaml的上下文与View Model绑定
然而在创建的ViewModel对象里面,就执行了这个命令属性吗?
于是,经过调试,我发现在new完后并没有去触发委托里面的Add方法,这是为什么呢?
在初始化阶段,AddCommand
被创建并设置好执行的动作(即Add
方法),但这并不意味着Add
方法被立即执行。只有当用户与UI进行交互时(比如点击按钮),AddCommand
才会被触发,从而执行Add
方法。
这里注意,命令属性的绑定方法:
数据属性的绑定方法,比如文中的TextBox:
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容