WPF和WinForm的區別,理解資料驅動與事件驅動的優勢對比

2021-03-23 12:01:44

WPF和WinForm的區別

WPF,即windows presentation foundation,windows呈現基礎,屬於.net framework3.0,是微軟推出取代winform的產品,能做到分離介面設計人員與開發人員的工作,提供多媒體互動使用者圖形介面,三大核心程式集是presentationcore、presentationFramework、windowsBase。

如下圖是wpf的結構:它的設計器是用xaml語言來寫的,就像寫html一樣。

 

WinForm是.Net開發平臺中對Windows Form的一種稱謂。Windows表單可用於設計表單和可視控制元件,以建立豐富的基於Windows的應用程式。Windows表單提供了一套豐富的控制元件,並且開發人員可以定義自己有特色的新的控制元件。WinForm控制元件是指以輸入或運算元據的物件。比如:ComponentOne是.net平臺下對資料和方法的封裝。有自己的屬性和方法。屬性是控制元件資料的簡單存取者。方法則是控制元件的一些簡單而可見的功能。包含在 .NET Framework 中的 Windows表單類旨在用於 GUI 開發。

如下圖是WinForm的結構:它的設計器是VS自帶的控制元件進行拖拽,設定控制元件對應的屬性,事件。

 

WPF和WinForm的對比

 

雖然WinForm上手方便但是也帶來了一系列開發的問題

1.為了滿足winform使用者介面的需求, 所以也自然誕生了很多公司或者個人為其開啟一套經常UI的統一處理的控制元件, 如市面上常見的有DevExpress 、DotenetBar 等等。所以自然就暴露出了新的問題,  使用了新的控制元件、那麼自然會有一套新的資料獲取方式、又需要去適應新的整套開發方式、而使用新的控制元件只是為了滿足winform介面不豐富、或者更加強大的功能。

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元素,也即:控制元件就是資料和行為的載體。

 

資料驅動型

什麼是資料驅動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的前景將是一片光明的。