当前位置: 首页 > 科技观察

Wpf中的Mvvm模式及其实现之一Mvvm模式介绍

时间:2023-03-14 11:32:41 科技观察

0x00写前面的废话之前一直在用Winform。乍一看,感觉和Winform没什么区别。可以拖入控件,在控件属性面板设置属性,在事件面板监听事件,后台代码处理事件。一切都是那么熟悉。XAML布局也和Android布局很像,所以没学直接上手,摸索后感觉差不多。结果,我不适应各种事情。把控件拖进去后,总是调不好显示模式。在后台代码中找不到操作控件的方法。WPF引入的各种特性我没有看懂。我一直想把它改回来。后来看了刘铁萌的《深入浅出WPF》,里面说WPF要按照WPF的方式开发。直到那时我才认真开始学习WPF。现在控制面板和属性面板已经很少用了,界面布局基本都是用代码完成的,感觉每个细节都可以控制。后来接触到MVVM,才体会到在MVVM模式下开发WPF的好处。现在除非不再需要Winform,widgets和测试程序都是直接在后台写的,比较复杂的需要长期使用和维护的就用MVVM模型。本系列文章主要写自己对MVVM的理解以及核心部分的简单实现。0x01MVVM模式介绍MVVM是Model、View、ViewModel的缩写。这种模式的引入是利用ViewModel来降低View和Model之间的耦合度,即降低View和Model之间的耦合度。也可以说是降低了接口和逻辑之间的耦合度。理想情况下,接口和逻辑是完全分离的。单方面更改接口时,无需更改逻辑代码,更改相同逻辑代码时无需更改接口。同一个ViewModel可以使用完全不同的View来展示,同一个View也可以使用不同的ViewModel来提供不同的操作。1.ModelModel是一个类,是对现实中事物的抽象。开发过程中涉及的东西可以抽象成Models。比如客户,客户的姓名、电话号码、电话号码、地址等属性也对应类中的属性。为客户下单、付款等行为对应类中的方法。2.ViewView好理解,就是界面。3.ViewModel上面说了Model的抽象,那么ViewModel就是View的抽象。显示的数据对应ViewMode中的Property,执行的命令对应ViewModel中的Command。0x02WPF中的MVVM解耦方式在WPF的MVVM模式中,View和ViewModel之间的数据和命令的关联是通过绑定实现的。绑定后,View和ViewModel不产生直接依赖关系。具体来说,当View中有数据变化时,它会尝试修改绑定目标。同样的,View在执行命令的时候,也会去寻找绑定的Command并执行。反过来,ViewModel会在Property发生变化时发出通知,说“名为XXX的Property发生了变化,你们Views中绑定XXX的人也将随之发生变化!”至于View有没有收到?变化也不在乎。将ViewModel中的Command与View分离更容易,因为Command在操作执行过程中操作数据时根本不需要操作View中的数据,而只需要操作ViewModel中的Property,而Property的改变可以通过绑定ReflectedonView来完成。这样在测试Command的时候就不需要View的参与了。这也是我刚接触WPF时看不懂的所谓数据驱动。这样,可以完全不用View测试ViewMode,也可以完全不用ViewModel测试View(当然只是测试界面布局、动画等业务相关的内容)。0x3MVVM框架要解决的问题从图中可以看出,如果要实现一个MVVM框架,最基本要解决的问题就是数据绑定和命令绑定。另外,由于UI中会产生大量的事件,所以也需要将事件绑定到MVVM中的命令上。后续文章将尝试依次解决这些问题。最后还是想说,任何设计模式都是参考,都有使用场景,不要生搬硬套。在实际开发中,应根据项目的特点采用更具适应性的模型。本文转载自微信公众号《CSharp编程百科全书》,可通过以下二维码关注。转载本文请联系CSharp编程百科公众号。