最近經歷了原公司的變動,回老家呆了兩個月,回到深圳要開始一段新的工作旅程了。最近找工作的時候發現不少.Net的工作是關於WPF客戶端的,就又重新買了本劉鐵錳大神的WPF的書,之所以說重新,因為從原公司離開的時候把兩本WPF的書送給同事了。
但是學了一部分以后發現WPF真的還是很不錯的一項技術,暫且不討論.NET的生態(生態跟技術的優劣不能完全划等號)。微軟算是比較早提出MVVM思想的框架。
以下描述僅限於個人最近來自B站劉鐵猛的視頻資料和關於他的WPF書籍的一些整理,歡迎指正。如后續有其它心得就隨時整理。
我們先從一個簡單的demo談起.
當我們創建一個WPF程序后,會有一個文件MainWindow.xaml和它對應的代碼后置文件.我們先從這兩個文件說起.
Mainwindow.xaml:當程序啟動時依托於App.xaml來加載Mainwindow.xaml來執行。
對應的后端代碼類MainWindow.xaml.cs
WPF中的MVVM
我們主要通過一個簡單地demo去體驗一下WPF的MVVM.
首先放上代碼的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的閉源框架了,一直在學術而學不得道,就此告別吧。