WPF和WinForm的区别,理解数据驱动与事件驱动的优势对
⽐
WPF和WinForm的区别
,即windows presentation foundation,windows呈现基础,属于 framework3.0,是微软推出取代winform的产品,能做到分离界⾯设计⼈员与开发⼈员的⼯作,提供多媒体交互⽤户图形界⾯,三⼤核⼼程序集是presentationcore、presentationFramework、windowsBase。
如下图是wpf的结构:它的设计器是⽤语⾔来写的,就像写html⼀样。
WinForm是.Net开发平台中对Windows Form的⼀种称谓。Windows窗体可⽤于设计窗体和可视控件,以创建丰富的基于Windows的应⽤程序。Windows窗体提供了⼀套丰富的控件,并且开发⼈员可以定义⾃⼰有特⾊的新的控件。WinForm控件是指以输⼊或操作数据的对象。⽐如:ComponentOne是平台下对数据和⽅法的封装。有⾃⼰的属性和⽅法。属性是控件数据的简单访问者。⽅法则是控件的⼀些简单⽽可见的功能。包含在 .NET Framework 中的 Windows窗体类旨在⽤于 GUI 开发。
如下图是WinForm的结构:它的设计器是VS⾃带的控件进⾏拖拽,设置控件对应的属性,事件。
WPF和WinForm的对⽐
虽然WinForm上⼿⽅便但是也带来了⼀系列开发的问题
1.为了满⾜winform⽤户界⾯的需求, 所以也⾃然诞⽣了很多公司或者个⼈为其开启⼀套经常UI的统⼀处理的控件, 如市⾯上常见的有DevExpress 、DotenetBar 等等。所以⾃然就暴露出了新的问题, 使⽤了新的控件、那么⾃然会有⼀套新的数据获取⽅式、⼜需要去适应新的整套开发⽅式、⽽使⽤新的控件只是为了满⾜winform界⾯不丰富、或者更加强⼤的功能。
windows开发平台2.暂且不考虑第三⽅控件带来的新的问题、winform本⾝的开发模式、就存在着天然的缺陷, 举个例⼦, 按照常规的⽅式我们给⼀个winform 控件进⾏数据绑定操作。按照事件驱动的模式, 他则是需要根据控件名来获取我们原始绑定的数据。 【 界⾯与数据完全耦合, 取数据在绑定之前已经知道数据的结构, 在获取的数据的时候却还要回过头去通过控件来数据】
WPF的不同之处:
1.WPF不仅仅在⽀持原⽣的Winform旧模式的操作下,升级了⼀种全新的模式,也是就是MVVM模式(数据和视图分离), 不再为每个元素添加固定的名称, 然后通过后台进⾏事件进⾏业务代码编写。
2.⼀套扩展能⼒超强的UI界⾯, 与早期的GDI+/GDI不同。WPF是基于DirectX引擎的,⽀持GPU硬件加
速,在不⽀持硬件加速时也可以使⽤软件绘制。⾼级别的线程绘制可以提⾼使⽤者的体验。⾃动识别显⽰器分辨率并进⾏缩放。
3.有诸多的新功能,诸如: 样式、触发器、命令、动画、模板 。
4.WPF和winform最⼤的区别在于WPF底层使⽤的DirectX((Direct Extension)多媒体编程接⼝,加强3D图形和声⾳效果,有很多API组成。按照性质分类可分为四⼤部分:显⽰部分,声⾳部分,输⼊部分和⽹络部分。),winform底层使⽤的是GDI+((Graphics Device Interface)图形设备接⼝,它的主要任务是负责绘图程序之间的信息交换、处理,所有windows程序的图形输出。),所以WPF的上更胜⼀筹。
数据驱动与事件驱动的对⽐
先从上分析,UI的功能是让⽤户观察和操作数据,为了能显⽰数据和响应⽤户的操作通知程序(通过事件来通知,如何处理事件⼜是⼀系列
的算法),所以控件就是显⽰数据和响应⽤户操作的UI元素,也即:控件就是数据和⾏为的载体。
数据驱动型
什么是数据驱动UI呢?我们知道传统的GUI界⾯都是由windows消息通过事件传递给程序,程序根据不同的操作来表达出不同的数据体现在UI界⾯上,这样数据在某种程度上来说,受到很⼤的限制。 WPF中是数据驱动UI,数据是核⼼,处于主动的,UI从属于数据并表达数据,是被动的。WPF数据第⼀,控件第⼆。尽管WPF中,数据处以第⼀, 但是对于UI来说,WPF中的UI仍然是其出⾊的⼀部分。
事件驱动型
虽然控件没有数据重要,但是还是⽐较重要的,毕竟界⾯是门⾯啊,只是在数据⾯前,它⽐较"有礼貌"。那什么是事件驱动型呢?Winform 中针对界⾯的元素进⾏操作, 所有业务都关联在当前窗⼝的后台, ⽽在此之前, ⽆奈你是双击事件的添加⽅式、还是后台绑定事件的⽅式,你都需要给每个元素⼀个固定规范的名称, 然后进⾏相关的数据操作。
三、总结
1.WinForm是“前后端”不分离的,wpf是前后端分离的。WinForm的设计器和CS⽂件的编码“耦合度”太⾼了,不能独⽴进⾏设计页⾯。
2.界⾯的UI肯定是wpf好看了,扩展性也⽐较⾼,但是前提是要会写样式,它对样式⽐较⾃由。
3.wpf 可以数据类似vue=>data绑定,使⽤Binding来进⾏数据的绑定轻松舒服的太多,WinForm没有
这样的使⽤,控件的值需要内部赋值才能起到wpf的这块的效果。
4.控件⾃适应:wpf⽐WinForm好太多了,⽆论是界⾯布局还是窗体⾃适应⽅⾯。
5.但是WinForm的难度⽐wpf相对低,很适合⼩⽩⼊门,因为wpf你还要学习xaml的语法,它的布局⽅⾯对新⼿来说有点困难。
WPF和WinForm属于两套界⾯渲染⽅式。⼀个是对传统windows界⾯元素的封装,通过gdi绘制。另⼀个是全新的dx渲染绘制的界⾯,也脱离了对传统windows控件的依赖,没有历史包袱,理论上可以展现更炫酷的界⾯。对初级开发⼈员来说,没太⼤区别,类似的基本设计器是他们设计界⾯的主要⼿段,⼀样给事件编写代码。对初级以上开发⼈员来说,wpf需要学习xaml,有全新的ui描述语⾔,特别是可以通过模板的嵌套实现复杂的元素,通过style实现类似css的功能,通过⽐winform完善的多的数据绑定机制实现业务逻辑可以专⼼对数据⽽不是界⾯进⾏开发。前途来说,两者必定还会长期共存。深⼊理解winform对理解windows⼀些内部机制有好处。好好学习wpf可以更⽅便过度到其他xaml相关技术,这是微软⽬前⼴泛使⽤的技术。
我个⼈看来,WinForm适合⼩⽩⼊门,将控件进⾏拖拽选择对应的处理事件简单直接明了。⽽WPF其实不仅仅是图形引擎⽽已,它将给Windows应⽤程序的开发带来⼀次⾰命,因为新的架构提供了⼀种全新的开发模式。当然对于普通⽤户⽽⾔,最直观的就是界⾯越来越漂亮,看起来越来越舒服了;但
对于开发⼈员⽽⾔,界⾯显⽰和代码将更好的得到分离,这与从前的桌⾯应⽤程序开发有很多不同(界⾯设置和代码是融合在⼀起的),这是⽐较具有⾰命性的改变之⼀,WPF的前景将是⼀⽚光明的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论