1. 程式人生 > >MvvmLight框架使用入門(一)

MvvmLight框架使用入門(一)

MvvmLight是比較流行的MVVM框架,相對較為簡單易用。可能正因為簡單,對應的幫助文件不多,對初學者就不夠友好了。這裡會用幾篇隨筆,就個人對MvvmLight的使用經驗,來做一個入門的介紹。 

  第一步我們先找到並下載MvvmLight的最新版,我個人傾向使用NuGet。這裡順便吐槽一下,MvvmLight貌似並未在Github上建立專案,雖然作者對MS深深的愛讓我感動,不過也不要排斥非MS系的東西嘛(喂,你自己還不是一樣……) 

  VS2015 Community版,開啟NuGet搜尋MVVM,第一個就是。什麼什麼你還在用盜版!!還在搜Key!!Community版不要錢!不要錢!不要錢!重要的事情說三遍!!!而且功能甩以前的Express版十條街,完全可以正常開發使用(三哥CEO這一點還是做的不錯的,崽賣爺田不心疼?)。


隨便你下第一個MvvmLight,還是第二個MvvmLightLibs,後者是純內褲類庫。反正我們今天只介紹純內褲類庫。(前者會多幫你建一個MainPage的ViewModel,並建立好Binding啥的,俺們以後再說.

MvvmLight的本體一共有三個DLL:GalaSoft.MvvmLight.dll,GalaSoft.MvvmLight.Extras.dll和GalaSoft.MvvmLight.Platform.dll。另外依賴微軟的一個DLL:Microsoft.Practices.ServiceLocation.dll(這貨SimpleIoc要用到,不是俺們討論的重點) 

  以下是本篇的精華,可能解釋的還不夠細緻全面,但這不是第一篇麼,後面幾篇再做更為詳細的介紹,舉個例子敲段程式碼解釋啥的。 

  GalaSoft.MvvmLight.dll程式集,包含5個名稱空間: 

  Namesapce GalaSoft.MvvmLight:最頂層的名稱空間,包含了MvvmLight的主體,最核心的功能都在這裡 。

ICleanup 

介面。實現該介面的ViewModel需要在Cleanup方法裡釋放資源,特別是   -= event 

ObservableObject 

該類實現了INotifyPropertyChanged介面,定義了一個可通知的物件基類,供ViewModelBase繼承 

ViewModelBase 

繼承自ObservableObject,   ICleanup。將作為MvvmLight框架下使用的ViewModel的基類。主要提供Set和RaisePropertyChanged供外部使用。同時會在Cleanup方法裡,Unregister該例項的所有的MvvmLight Messenger(在GalaSoft.MvvmLight.Messaging名稱空間定義) 

  Namesapce GalaSoft.MvvmLight.Command 

RelayCommand 

提供了一個ICommand介面的實現 

RelayCommand<T> 

提供了ICommand介面的泛型實現 

  Namesapce GalaSoft.MvvmLight.Helpers。MvvmLight框架內部使用的一些輔助類,框架的使用者不直接接觸該名稱空間。 

  Namesapce GalaSoft.MvvmLight.Messaging。訊息類名稱空間,提供全域性的訊息通知。可以簡單理解為全域性的event事件,後面會花一些篇幅講解使用。 

  Namesapce GalaSoft.MvvmLight.Views。和View結合較緊密,ViewModel通過依賴該名稱空間下的類,來避免直接引用View,用以解耦程式碼對具體的平臺的依賴。 

IDialogService 

對系統彈框訊息的抽象。針對具體平臺會在GalaSoft.MvvmLight.Platform程式集裡分別實現 

INavigationService 

對頁面導航的抽象,不同平臺會有不同的實現 

  GalaSoft.MvvmLight.Extras程式集,僅包含1個名稱空間: 

  Namesapce GalaSoft.MvvmLight.Ioc 。依賴注入使用的容器放在這個名稱空間。

ISimpleIoc 

介面,IOC(Inverse Of Control)控制反轉,我比較喜歡說依賴注入(Dependency Injection),簡單可以理解為一個託管的容器,替你建立和管理物件。在MVVM中,一般是ViewModel

PreferredConstructorAttribute 

該類繼承自Attribute,不常用。當ViewModel存在一個以上的建構函式時,可以通過他來指定SimpleIoc預設呼叫的建構函式 

SimpleIoc 

ISimpleIoc介面的實現。功能簡單實用 

  GalaSoft.MvvmLight.Platform程式集,依賴平臺具體實現的功能會放到這個程式集裡,包含2個名稱空間: 

  Namesapce GalaSoft.MvvmLight.Threading 

DispatcherHelper 

非UI執行緒操作UI執行緒時用到的幫助類,已針對各平臺不同的寫法做了封裝。 

  Namesapce GalaSoft.MvvmLight.Views 

DialogService 

IDialogService介面的實現 

NavigationService 

INavigationService介面的實現