说起Caliburn就不得不先说说MEF框架,因为Caliburn在很多地方上用到了这个模型。MEF(Managed Extensibility Framework)是.net 平台下的一个框架,全称托管扩展框架,是将.net下的代码进行组件式组合而设计的,MEF的具体内容我会再详细去写,本次内容重点并非它,这里我们只是介绍下,MEF框架支持两类操作,Import and Export, 这两类操作是很重要的组件功能, 将一个类视为一个松耦合的组件, 这个类可以从一个接口派生, 然后Export成接口的形式。 这样,Import组件时, 就可以使用该类的实例化对象了。 Caliburn中大量使用此组件模型,众多的类的组合,大部分都导出成了对应的接口的模式进行组合,我们在开发时,也可以继续使用。
<Button cal:Message.Attach="Save" Height="46" Content="Save"/>
这句话就是了,cal:Message.Attach="Save"就将当前的默认消息绑定到了ViewModel中的
"
public void Save()
{
windowManager.ShowWindow(new WindowViewModel());
}
[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线程中调用
原文:http://www.cnblogs.com/sunxfancy/p/3578738.html