WPF自學入門(十)WPF MVVM簡單介紹


   前面文章中,我們已經知道,WPF技術的主要特點是數據驅動UI,所以在使用WPF技術開發的過程中是以數據為核心的,WPF提供了數據綁定機制,當數據發生變化時,WPF會自動發出通知去更新UI。 

  我們不管是NET中還是WPF中使用模式目的就是想達到高內聚低耦合。在WPF開發中,經典的編程模式是MVVM,是為WPF量身定做的模式,該模式充分利用了WPF的數據綁定機制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI顯示和邏輯代碼的耦合度,如需要更換界面時,邏輯代碼修改很少,甚至不用修改。與WinForm開發相比,我們一般在后置代碼中會使用控件的名字來操作控件的屬性來更新UI,而在WPF中通常是通過數據綁定來更新UI;在響應用戶操作上,WinForm是通過控件的事件來處理,而WPF可以使用命令綁定的方式來處理,耦合度將降低。

一、MVVM介紹

  MVVM是Model-View-ViewModel(模型-視圖-視圖模型)的縮寫形式,它通常被用於WPF或Silverlight開發。我們可以通過下圖來直觀的理解MVVM模式:  

 

  1、View就是用xaml實現的界面,負責與用戶交互,接收用戶輸入,把數據展現給用戶。

  2、ViewModel是一個C#類,負責收集需要綁定的數據和命令,聚合Model對象,通過View類的DataContext屬性綁定到View,同時也可以處理一些UI邏輯。

  3、Model,就是系統中的對象,可包含屬性和行為。

  三者之間的關系:View對應一個ViewModel,ViewModel可以聚合N個Model,ViewModel可以對應多個View

二、MVVM的優勢

      MVVM的根本思想就是界面和業務功能進行分離,View的職責就是負責如何顯示數據及發送命令,ViewModel的功能就是如何提供數據和執行命令。各司其職,互不影響。在實際的業務場景中我們經常會遇到客戶對界面提出建議要求修改,使用MVVM模式開發,當設計的界面不滿足客戶時,我們僅僅只需要對View作修改,不會影響到ViewModel中的功能代碼,減少了犯錯的機會。隨着功能地增加,系統越來越復雜,相應地程序中會增加View和ViewModel文件,將復雜的界面分離成局部的View,局部的View對應局部的ViewModel,功能點散落在各個ViewModel中,每個ViewModel只專注自己職能之內的事情。ViewModel包含了View要顯示的數據,並且知道View的交互代碼,所以ViewModel就像一個無形的View。使用MVVM架構具有以下優勢

1、易維護

2、靈活擴展

3、易測試

4、用戶界面設計師與程序開發者能更好的合作

 

三、MVVM簡單示例

      為了讓大家直觀地了解MVVM的編程模式,下面會用到前面講到的數據綁定以及命令等知識。

     新建WPF項目,名稱WPFMVVMDemo。添加用戶類,如下圖

 

      在WPF術語中,這個叫“模型”,GUI是“視圖”。不可思議的是“視圖模型”,通過數據綁定將它們綁在一起,它真的是一個很好的適配器能將模型變成某種WPF框架可以使用的東西。所以這個就是“模型”。

      接下來我們會非常容易理解創建視圖模型:

 

      請注意這個視圖模型不是十分正確的。因為我們在視圖模型里暴露了屬性,我們顯然會想使在代碼里改變的用戶名和公司名自動的顯示在視圖上

 

后台代碼:

 

運行結果:

 

       這里我們點擊更新按鈕不會有任何反應,因為還沒有實現數據綁定。此時視圖不會收到任何的關於屬性改變的通知。要解決這個問題我們必須實現名稱為INotifyPropertyChanged的接口。任何實現了這個接口的類,當屬性發生改變的時候會通知所有監聽者,所以我們需要修改視圖模型NameViewModel類:

 

      這里會產生多個事件。首先,我們檢查了我們是否真的改變了屬性。第二,如果值已經改變,我們向所有監聽者注冊PropertyChanged事件。現在我們有了一個模型Name和一個視圖模型NameViewModel。我們只需要在定義視圖。只需要修改視圖MainWindow:

 

運行結果:

本文的demo下載地址:WPFMVVMDemo1.zip

 


免責聲明!

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



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