Caliburn Micro 框架 WP8使用研究(一)簡介


介紹

MVVM的出現給WPF Silverlight程序定義了程序的框架,MVVM可以解決業務層和UI層的耦合問題,更多優點不再贅述。

在WP手機端,很多工程也都采用MVVM進行架構,比較常見的工具集是MVVM Light Toolkit 。它被應用在很多已知WP項目中,也有一些自己實現的MVVM架構工具多數也都基於此。而我們今天要說的是Caliburn Micro這個用於MVVM架構的Framework。

   

首先對比下MVVM Light Toolkit 和Caliburn Micro:

  

MVVM Light

Caliburn Micro

View和ViewModel之間的通信

事件:通過EventToCommand將View中的事件通過ICommand接口

Binding到ViewModel中定義的Command上

屬性:Binding 到ViewModel中對應屬性

事件:通過Action直接關聯View中的事件到ViewModel里的方法中無需在ViewModel中定義Command

   

屬性:根據命名協定自動Binding

View和ViewModel之間如何Binding

View 中綁定DataContext到 ViewModelLocator中的ViewModel

根據命名協定(Conventions)自動找到View對應的ViewModel然后進行自動綁定

ViewModel之間如何通信

提供Messenger進行通信

提供EventAggregator進行通信

ViewModel中執行導航

自定義NavigationService

根據命名協定通過ViewModel找到View然后執行導航

優點

概念簡單清晰,容易理解

自動完成許多工作,大大降低開發人員編碼量

不足

相比Caliburn Mirco實現相同邏輯需要的代碼量更多

學習成本較高,許多概念初次接觸不容易掌握

   

兩者孰優孰劣不做過多分析,個人觀點,雖然CM學習成本較高,但其提供了更多方便開發的功能,是團隊的好選擇。

   

從Hello World開始

 

讓我們先從最簡單的程序開始看下CM 框架的基本使用

   

我們新建好WP8程序后在References里面可通過Nuget來添加Caliburn Micro:

   

   

接下來我們要做的是將App.xaml.cs內的東西移除(沒錯,是移除,后面會詳細介紹)之后App.xaml.cs看起來是這個樣子

   

   

之后我們在根目錄下定義一個類,名字隨意比如Bootstrapper之后添加如下內容:

using System.Collections.Generic;

using Caliburn.Micro;

using CaliburnPractise.ViewModels;

   
namespace CaliburnPractise
{

  public class Bootstrapper:PhoneBootstrapper
  {

    private PhoneContainer _phoneContainer;
  
    protected override void Configure()
    {
      _phoneContainer = new PhoneContainer(RootFrame);
      _phoneContainer.RegisterPhoneServices();
    }

    protected override object GetInstance(System.Type service, string key)
    {
      return _phoneContainer.GetInstance(service, key);
    }   

    protected override IEnumerable<object> GetAllInstances(System.Type service)
    {
      return _phoneContainer.GetAllInstances(service);
    }
    
protected override void BuildUp(object instance)     {       _phoneContainer.BuildUp(instance);     }
  } }

 

 

分析:CM使用PhoneContainer作為容器來提供事例(此處涉及Dependency Inject以及Container的概念具體情況不在贅述,若不很清楚可查閱相關資料,在此不進行過多的解釋)

之前我們將App.xaml.cs中文件刪除是因為PhoneBootstrapper對其進行了包裝,PhoneBootstrapper內部對這些事件進行了接管。

   

接下來我們需要在App.xaml中進行Bootstrapper的定義。

如此Bootstrapper添加完畢。

   

接下來我們在根目錄下添加MainPageViewModel並在其中定義

在MainPage.xaml中添加Textblock 並起名為Title

   

在Bootstrapper的Configure中加入下面代碼

   

然后我們運行程序,便會看到神奇的事情,程序打開之后UI中的Title自動Binding了。

CM自動完成了兩件事情:

1、根據命名協定自動對MainPage進行了DataContext的Binding,通過PhoneContainer找到

對應的MainPage然后Auto Binding

2、根據命名協定找到了ViewModel中名字為Title的屬性,並自動Binding到Textbox的Text上。

   

接下來我們在MainPageViewModel中添加一個函數試試:

在View中加一個按鈕名字叫做SayHello:

   

之后運行,點擊這個按鈕,又是神奇的一幕,MessageBox彈出,SayHello被執行。

   

分析:

通過上面的例子我們可以看到,程序將UI代碼和邏輯代碼分開,而且我們並沒有很多繁瑣的工作,這些歸功與CM內部命名協定機制,進行自動Binding幫助我們完成工作。很強大不是么?

   

通過上面的小例子我們可以看出CM的優勢和它的厲害之處,在后續文章中我會對其中的內容進行深入的分析。

   

   

先提供一些地址供大家學習:

官方文檔:caliburnmicro.codeplex.com/documentation

系列博客:wp.qmatteoq.com/first-steps-with-caliburn-micro-in-windows-phone-8-the-first-project/

   

QQ交流群:182659848 歡迎加入進來一起探討。

   

   

   

   


免責聲明!

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



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