一、简介
Caliburn.Micro 的官方网站是 http://caliburnmicro.com/。 CM非常适合使用组件化、Mvvm、IoC开发模式的开发者。采用 CM 框架可使您的代码更简洁、更易于理解和维护。
二、常用功能
1. 通过命令绑定到View,实现了ViewModel与View之间的松耦合。
CM 提供了多种方式来实现命令绑定:Command, Message 和 Event 等。其中 Command方式是默认方式,消息和事件方式均可以通过视图模型进行触发以实现松散耦合。这些绑定机制都遵循“约定优于配置”的原则。
public class MyViewModel : Screen
{
public void SayHello()
{
MessageBox.Show("Say Hello");
}
}
2. 通过依赖注入,提供了一种可测试的方式进行开发。
Caliburn.Micro 默认集成 Simple Injector,也可以很容易地切换到其他IoC容器。以下是一个很简单的示例:
public class MyAppBootstrapper : BootstrapperBase
{
private readonly SimpleInjector.Container _container = new SimpleInjector.Container();
protected override void Configure()
{
_container.RegisterSingleton
();
_container.RegisterSingleton
();
_container.RegisterSingleton
();
//Register ViewModels
_container.Register
();
}
}
3. 通过消息,在ViewModel之间提供了一种松散耦合的方式进行通信。
当视图模型不需要直接知道消息目标的时候,触发消息会更加方便。视图模型和消息目标可以同步或异步响应触发消息。CM 通信机制支持实现 IHandle 接口的视图模型进行事件的订阅、取消订阅和响应。以下是一个简单的消息监听和响应:
public class PublishViewModel : Screen, IHandle
{
private readonly IEventAggregator _eventAggregator;
public PublishViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}
public void Publish()
{
_eventAggregator.PublishOnUIThread(new MyMessage());
}
public void Handle(MyMessage message)
{
MessageBox.Show("Got the Message");
}
protected override void OnDeactivate(bool close)
{
base.OnDeactivate(close);
_eventAggregator.Unsubscribe(this);
}
}
三、MVVM应用
在MVVM模式中,应用程序按照模型、视图模型和视图的分层方式进行。CM框架可以大大提高开发人员的开发效率。开发人员只需要编写ViewModel层,剩下的都会自动完成。
此外,CM 还提供了大量命令和事件,可用于更高级的MVVM应用场景。部分MVVM的实现内容如下:
https://github.com/canton7/Stylet
Stylet 是基于 Caliburn.Micro 和最新.NET Core的轻量级MVVM框架。 Stylet不仅支持WPF应用程序,而且完全支持通过 Avalonia XAML进行跨平台UI开发。
https://github.com/Caliburn-Micro/Caliburn.Metro
Caliburn.Metro 是将 Caliburn.Micro 和 Microsoft官方UI框架Metro 支持集成起来的库,它使你在WPF应用中使用了漂亮的Metro界面。并且提供了一些常用组件以加速设计开发。
https://github.com/Caliburn-Micro/Caliburn.Fody
Caliburn.Fody是一个 Visual Studio 的扩展,它可以通过解决方案来自动添加PropertyChanged、OnPropertyChanged和OnPropertyChange方法。Caliburn.Micro 中通常我们要实现的一些方法就是在ViewModel中的属性值发生更改时需要通知视图。但这样的处理过于繁琐。Caliburn.Fody 是面向切面编程的思想,代码上没有任何修改,它会自动集成到编译过程中。
https://github.com/ChernenkovS/Caliburn.Micro.StatePreservation
应用程序中涉及 Windows 的重启、用户清理等操作,会丢失之前用户上下文的重要数据。Caliburn.Micro.StatePreservation库可以帮助您在不依赖关键值的情况下将应用程序状态保存并恢复到上次保存的状态。
https://github.com/fabxoe/Caliburn.Ninject
Caliburn.Ninject是一个深度集成 Ninject 的依赖注入框架,它支持透明绑定和 UML图生成。它可以在WPF应用程序中使用,并且完全有效。
除了这些应用框架之外,还有很多其他的组件和插件已经被开发出来。这些组件和插件可以在Github上找到。
结束语
Caliburn.Micro 是一个功能强大的框架,它提供了许多功能和工具,可以帮助您在WPF应用程序上实现MVVM模式。这篇文章介绍了CM的基础概念和局限性,以及CM如何为各种MVVM应用程序开发提供支持。