Caliburn教程1

从MEF谈起

说起Caliburn就不得不先说说MEF框架,因为Caliburn在很多地方上用到了这个模型。
MEF(Managed Extensibility Framework)是.net 平台下的一个框架,全称托管扩展框架,是将.net下的代码进行组件式组合而设计的,MEF的具体内容我会再详细去写,本次内容重点并非它,这里我们只是介绍下,MEF框架支持两类操作,Import and Export, 这两类操作是很重要的组件功能, 将一个类视为一个松耦合的组件, 这个类可以从一个接口派生, 然后Export成接口的形式。 这样,Import组件时, 就可以使用该类的实例化对象了。
Caliburn中大量使用此组件模型,众多的类的组合,大部分都导出成了对应的接口的模式进行组合,我们在开发时,也可以继续使用。

Caliburn的消息响应

<Button cal:Message.Attach="Save" Height="46" Content="Save"/>

这句话就是了,cal:Message.Attach="Save"就将当前的默认消息绑定到了ViewModel中的void Save()函数中了。另外,cal作用域要手动添加:xmlns:cal="http://www.caliburnproject.org"

Caliburn开启新窗口

   public void Save()
    {
        windowManager.ShowWindow(new WindowViewModel());
    }

WindowManager

[Export(typeof(IShell))]
public class ShellViewModel : Screen,IShell
{
    readonly IWindowManager windowManager;
    
    [ImportingConstructor]
    public ShellViewModel(IWindowManager windowManager)
    {
        this.windowManager = windowManager;
    }
    
    public void Save()
    {
        windowManager.ShowWindow(new WindowViewModel());
    }
    public bool CanSave()
    {
        return true;
    }
}

这里的CanSave函数会自动被绑定为,判读Save功能是否能使用上,如果不能,上面绑定的按钮也会自动变为灰色

各组件简介

Caliburn中的ActionMessages是整个框架的精髓,可以自动的绑定值,并且可以传递值,非常方便快捷。

Action Conventions提供了一系列默认的绑定策略,例如XXXView自动绑定到XXXViewModel,
如果有一个按钮Name=Save,其ViewModel中又有一个Save方法,那么这个按钮的Click事件就会默认绑定到这个函数上去。更方便的是,你还可以设计公约,使得其他公约绑定可以实现。

Binding Conventions使得属性也可以自动绑定,如何一个子元素的名字和其ViewModel中的属性名字相同,系统会试图绑定它们。并支持用户设置自己的自动绑定。

Screen, ScreenConductor and ScreenCollection 可以使得基于模型的跟踪活动元素,强制生命周期,优雅的结束应用程序等

EventAggregator 是一个基于pub/sub模型的管理器,你首先要注册一个message handler, 然后他就会发给你任何你想要监听的消息,甚至支持多态。要声明一个感兴趣的message,需要在UI线程中调用 IHandle<TMessage>

posted @ 2014-03-03 17:05  西风逍遥游  阅读(708)  评论(0编辑  收藏  举报