最近經歷了原公司的變動,回老家呆了兩個月,回到深圳要開始一段新的作業旅程了,最近找作業的時候發現不少.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
我覺著比較重要的點就是怎么根據業務場景去定義Model和ViewModel(MVVM以資料驅動開發),Model更多的與物件直接相關,是現實世界實物的抽象;而ViewModel更多的是與程式運行界面相關,是界面屬性與功能的抽象;
<style></style>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/1749.html
標籤:WPF
下一篇:wpf之DataGrid系結DataTable,其中DataGridComboBoxColumn雙向系結列舉enum
