WPF初識--MVVM


最近經歷了原公司的變動,回老家呆了兩個月,回到深圳要開始一段新的工作旅程了。最近找工作的時候發現不少.Net的工作是關於WPF客戶端的,就又重新買了本劉鐵錳大神的WPF的書,之所以說重新,因為從原公司離開的時候把兩本WPF的書送給同事了。

但是學了一部分以后發現WPF真的還是很不錯的一項技術,暫且不討論.NET的生態(生態跟技術的優劣不能完全划等號)。微軟算是比較早提出MVVM思想的框架。

今天就暫且把自己看過的內容的一部分做個記錄,為自己做一個階段的總結吧。現在的工作中可能用不到WPF,以后也可能用不到。

 

以下描述僅限於個人最近來自B站劉鐵猛的視頻資料和關於他的WPF書籍的一些整理,歡迎指正。如后續有其它心得就隨時整理。

我們先從一個簡單的demo談起.

當我們創建一個WPF程序后,會有一個文件MainWindow.xaml和它對應的代碼后置文件.我們先從這兩個文件說起.

Mainwindow.xaml:當程序啟動時依托於App.xaml來加載Mainwindow.xaml來執行。

對應的后端代碼類MainWindow.xaml.cs

 WPF中的MVVM

我們主要通過一個簡單地demo去體驗一下WPF的MVVM.

通過MVVM我們可以實現前端和后端的解耦.也可以更方便的切換前端的UI而不需要更改后台代碼。

首先放上代碼的demo,如果感興趣可以任意下載.

鏈接:https://pan.baidu.com/s/1RIX6gcUCVCNGqi7vdX5SIg
提取碼:1314

目錄結構如下,因為我們這個例子只是一個demo,Model和View文件夾並沒有內容,我們只是為了簡單說明MVVM.

程序運行結果呈現是這樣的:

其中AddCommand和DivideCommand是屬於我們自定義的一個類型DelegateCommand,這個類型最主要是我們繼承了一個ICommand接口並實現Execute方法.以便實現按鈕的點擊事件.

三個數據屬性在頁面值發生變化時會觸發RaisePropertyChange方法,該方法在我們的自定義類NoticeObject中,該類繼承自接口INotifyPropertyChange,並含有一個事件屬性PropertyChanged,實現數據的雙向綁定實際上就是通過此事件來通知Binding實現.

最后我們就可以在利用組件的屬性設置數據的雙向綁定,和響應的觸發操作.

 

 然后如果想讓前后端屬性關聯起來,我們必須制定一個上下文,即這些屬性和操作去匹配的位置.

 夜已深,疫情也導致了上半年的養肥增膘.需要開啟鍛煉計划了,后續會再整理之前看過的另一個更復雜的WPF的例子以及一些其它資料.

 

索性就在這里把第二個復雜點的例子粘上來,

也是來自於WPF大神劉鐵猛的示例.

我簡單的描述下.

鏈接:https://pan.baidu.com/s/1nbOLFF_TE7gnT8dV9b5CVw
提取碼:1314

代碼最終運行效果如下:

其實這個demo思想還是跟第一個例子一樣,最主要不同的有幾個地方:

(1)完善了Model類:

 

 

(2)在上一個demo中的自定義類DelegateCommand換成了命名空間Microsoft.Practices.Prism.Commands下的類DelegateCommand

上一個demo中的NotificationObject換成了命名空間Microsoft.Practices.Prism.ViewModel中的NotificationObject.

       關於WPF我覺着比較重要的點就是怎么根據業務場景去定義Model和ViewModel(MVVM以數據驅動開發),Model更多的與對象直接相關,是現實世界實物的抽象;而ViewModel更多的是與程序運行界面相關,是界面屬性與功能的抽象.

 

后續:到今天是9.21號,抽空看了書中的系統學習XAML語法/深入淺出話Binding/深入淺出話屬性幾節,打算不再看下去了,實在提不起興趣學.NET Framework的閉源框架了,一直在學術而學不得道,就此告別吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM