Caliburn Micro框架快速上手(WP)

1、使用nuget添加起始工程 app

   

   

2、修改App.xaml文件和App.xaml.cs文件 框架

   

AppBootstrapper介紹: 函數

AppBootstrapper根據中文的直譯能夠看出來此類的大概的做用,但筆者總結爲: ui

一、負責接管程序生命週期中的事件(Lunch Deactivate等) spa

二、配置IOC容器 code

三、添加自定義的命名協定 blog

   

一、負責接管程序生命週期中的事件: 接口

以前的app生命週期相關的操做在AppBootstrapper裏面能夠經過重載找到,所以若程序原來邏輯中存在處理,放到對應的函數中便可 生命週期

   

   

二、配置IOC容器: 事件

   

   

CM框架中自帶了一個容器,叫作PhoneContainer,很簡潔的容器,提供了一系列的函數用來配置,若是但願使用其餘容器,那麼能夠在AppBootstrapper中進行修改和配置 Container介紹

   

三、添加自定義命名協定:

CM有一套自動binding機制,能夠根據控件的Name對應到VM中的屬性上,並將控件設定的屬性Binding到VM中對應的屬性上。舉個例子:

對於TextBox而言x:Name若設定爲Title,那麼便會自動將Textbox的Text屬性自動Binding到TextBox的DataContext所在的VM的Title屬性上(若是存在)

固然若是不喜歡這種方式,使用原始的Binding也是支持的。(筆者建議使用Text={Binding Title}更具可讀性)

   

3、CM的View和ViewModel自動Binding機制

   

CM會根據內置的View、ViewModel 命名協定(Conventions)尋找View/ViewModel

   

具體的協定內容以下:

   

  

ViewModel

View

Convention

<EntityName>ViewModel

<EntityName>View

舉例

TabViewModel

TabView

Convention

<EntityName>PageViewModel

<EntityName>Page

舉例

OrderPageViewModel

OrderPage

Convention

<RootNS>.<ViewModelTypeName>

<RootNS>.<ViewTypeName>

舉例

MyProject.MainPageViewModel

MyProject.MainPage

Convention

<RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>

<RootNS>.Views.[<ChildNS>].<ViewTypeName>

舉例

MyProject.ViewModels.ShellViewModel

MyProject.Views.ShellView

  

MyProject.ViewModels.Utilities.SettingsViewModel

MyProject.Views.Utilities.SettingsView

   

命名協定詳細的介紹

   

4、CM的頁面導航處理

   

關鍵類:

   

UriBuilder

   

工做原理:

此類爲一個Builder類用來構建導航的Uri。並根據View-ViewModel協定,根據ViewModel找到對應的View路徑,而後進行導航。

主要方法:

WithParam

將傳入的參數和值寫入到類內部的字典中

Navigate

調用內部BuildUri方法,將以前字典中的鍵值對序列化成導航參數,根據ViewModel找到View路徑,而後調用INavigationService接口定義的導航方法

   

FrameAdapter

   

CM內部實現了FrameAdapter這個類這個類的核心功能爲:

一、Hook 程序的Frame的導航事件,Navigating,Navigated

   

二、在Navigating觸發的時候

判斷上一個頁面的DataContext是否實現了IGuardClose和IDeactivate接口,若實現了IGuardClose接口,則根據接口中定義的CanClose來決定是否取消此次導航。若實現了IDeactive接口,則調用觸發上一個頁面的DataContext的Deactivate方法,具體代碼在後面。

   

三、在Navigated觸發的時候

經過反射調用頁面的構造方法(所以xaml.cs文件甚至能夠刪除掉)

根據當前頁面,根據View-ViewModel協定找到對應的ViewModel,將當前頁面的DataContext設置爲對應的ViewModel。

根據導航串中參數將參數注入到ViewModel中對應的屬性上

根據命名協定對頁面的子元素分別進行Binding

若ViewModel實現了IActivite接口,同時調用Activate

   

以上介紹能夠到CM的主頁上找到源碼進行更進一步的查看,並加深理解

   

明白上述兩個類的職責以後,那麼當咱們使用CM框架進行導航的時候,就能夠清楚的瞭解CM是如何實現根據VM找到View而後導航,而且將對應的屬性賦值上去了。

 

若是對CM框架有任何問題歡迎加入

WP8交流羣:182659848

相關文章
相關標籤/搜索