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