Caliburn.Micro开发框架介绍 (Windows phone

Caliburn.Micro开发框架介绍

         Caliburn是一套基于XAML的开发框架,它小巧而强大。利用它不但能提高开发效率,还可以提高XAML程序开发的可维护行、可扩展性和可测试性。Caliburn.Micro则是专门针对Windows phone开发的版本。

MVVM简介

         MVVM源于微软的软件开发模式,可以粗略的认为它是MVC模式的发展,原来Controller的职能被拆分,其中值转换器(Value Converter)和绑定器(binder)已经由框架实现,程序员可以更关注在逻辑实现上。MVVM的开发基于事件驱动,实现UI层和逻辑层的分离,从而使UI设计人员和程序员各施其职。MVVM中的View Model在Model和View之间扮演着值转换器的角色,把Model的数据交给View去绑定,把View的数据提交给Model;同时也要实现mediator设计模式,成为View和Model之间的逻辑协调者。

Caliburn.Micro简介

         Caliburn.Micro使用各种的配置和约定使得代码工作变得简洁。比如:你无需使用ViewModelLocator为某个View定位它的View Model,在Caliburn.Micro中只需要按照约定把View的名字加上后缀ViewModel,就是它的View Model的名字,如:MainPage和MainPageViewModel。

Caliburn.Micro自动把ViewModel绑定到View的DataContext。如果ViewModel的属性名和控件的名称相同,那么就会自动绑定上。如果该属性的值发生变化,控件的也能得到更新。

此外,Caliburn.Micro还为Windows phone的特性提供辅助,例如:tombstone的管理,应用程序生命周期和launcher。

当然,你也可以自定义各种约定。

准备工作

下载

Caliburn.Micro可以通过Visualstudio的NuGet工具获得,也可以在其官网下载发布包、源代码和例子。http://caliburnmicro.codeplex.com/

入口bootstrapper

Bootstrapper是Caliburn.Micro的入口,所有的ViewModel必须在这个类里注册,否则Caliburn.Micro无法为你的View和ViewModel建立关联。

如果需要自定义命名约定,也是在这个类里定义。

我们新建一个WP8工程,先删除默认创建的MainPage.xaml,创建Views目录,在Views目录下创建MainPage.xaml,创建ViewModels目录,在ViewModels下创建MainPageViewModel.cs类,修改WMAppManifest.xml中的起始页面为Views/MainPage.xaml。

在工程的根目录下创建bootstrapper.cs,其内容如下。

    public class AppBootstrapper : PhoneBootstrapper
    {
        PhoneContainer container;

        protected override void Configure()
        {
            container = new PhoneContainer(RootFrame);

            container.RegisterPhoneServices();
			//注册所有ViewModel
            container.PerRequest();

            AddCustomConventions();
        }

        static void AddCustomConventions()
        {
            //ellided  自定义命名约定
        }

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

        protected override IEnumerable GetAllInstances(Type service)
        {
            return container.GetAllInstances(service);
        }

        protected override void BuildUp(object instance)
        {
            container.BuildUp(instance);
        }
    }

 

初始化bootstrapper

         修改App.xml,初始化bootstrapper。



    
    
        
    


 

         修改App.xml.cs,默认的初始化代码已经不需要了。

    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
        }
    }

 

命名约定(naming convention)

         命名约定让Caliburn.Micro能自动关联起View和View Model,如果我们运行工程,浏览MainPage页面,则MainPageViewModel自动被实例化。

接下来就可以看看Caliburn.Micro是如何扮演值转换器的角色,看它是如何在View和ViewModel之间传递和转换值,以便View绑定这些值。

我们在ViewModel里增加一个叫Name的属性(Property)。

public class MainPageViewModel: PropertyChangedBase
{
	public MainPageViewModel()
	{
		Name = "Matteo";
	}
	private string name;
	public string Name
	{
		get { return name; }
		set
		{
			name = value;
			NotifyOfPropertyChange(() => Name);
		}
	}
}

 

         在View里增加一个文本控件,使用和这个属性相同的名字,值就会自动绑定上去。(Caliburn.Micro也支持原有的binding语法)

x:Name="Name"/>

         注意,ViewModel继承了PropertyChangedBase类,在Name属性被修改的时候,调用NotifyOfPropertyChange方法发出通知,这使得Name属性被修改时,View里的绑定控件TextBlock能自动地更新。

行为(Actions)

命令(Commands)

         Caliburn.Micro使用一种叫做行为的机制,使得ViewModel响应View的事件。它很简单。

         View控件定义了名字。

 

Caliburn.Micro也有简写方式,但Blend不支持。使用Message.Attach,在Event和Action关键字后使用你想要的事件名和方法名。