我是靠谱客的博主 粗心小蘑菇,最近开发中收集的这篇文章主要介绍Caliburn.Micro入门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.简介

Caliburn是Rob Eisenberg在2009年提出的一个开源框架,可以应用于WPF,Silverlight,WP7等,框架基于MVVM模式,像它的名字一样,是企业级应用的一把利器。而Caliburn.Micro是Caliburn项目的精简版,重构了Caliburn的代码,精简掉了一些不常用的功能。

2.CM优点

1. ActionMessage,结合了Blend中的TriggerAction,可以把UI控件中的事件绑定到后台方法,类似于CallMethodAction。CM对ActionMessage进行了很多扩展,包括可以传入多个参数,参数支持绑定,可以通过CanExecute作执行前判断并设置控件的Enable等。
2. Conventions,协定,这个词听上去有点虚,其实就是智能匹配的意思。CM制定了一系列匹配的规则,比如说View和ViewModel之间的匹配,绑定时传入控件名可以找到控件,传入方法名可以绑定到方法等等。
3. Screen和Conductor,作为一个Presentation的框架,各个UI部件(Widget或者叫Pad)的管理是必不可少的。Screen就是用来表示UI部件的,它定义了一些列UI部件的生命期事件,比如Activated,DeActivated等。Conductor是用来管理Screen的,类似于传统的Controller,不同的Screen可以用一个Conductor来管理,Conductor也使用了策略模式允许更改对Screen的处理。
4. Coroutines,协同程序,定义了一组程序的执行,简化了异步编程。比如说在网络中下载图片并显示,通常来说需要显示BusyIndicator,后台线程去网络读取图片,读取成功后Invoke到UI线程,取消BusyIndicator,显示图片。CM提供了一个IResult接口,大大的简化了异步编程,结合ActionMessage,为AOP的扩展提供了可能。
5. 配置性和扩展性,CM移除掉了原Caliburn的一些IOC实现,作为一个通用框架,最常用办法就是使用工厂模式结合配置文件提供可配置性,使用IOC来解耦组件间的依赖。CM默认是使用MEF来做IOC扩展的,你可以自定义Bootstrapper来使用你喜欢的IOC容器,如Unity等。
6. 设计时支持(Design-time support),CM中的ActionMessage是继承自Blend中的TriggerAction的,也就是说可以在Blend编辑ActionMessage,大大方便了使用。

3.简单demo

1.先建一个WPF工程,取名CaliburnMicroTest;
2.使用Nuget引入Caliburn.Micro.dll、System.Windows.Interactivity.dll和System.ComponentModel.Composition.dll三个包(第一个包是提供Caliburn.Micro的功能函数的,后两个dll是为了添加MEF的容器时使用的);
3.删除MainWindow.xaml项目文件(也就是新建项目自带的主窗口)。在App.xaml项目文件中,删除 StartupUri 节点特性,此步骤是为了将初始化窗口重建,准备指向Caliburn Micro,而不是WPF自定义的;
4.新建一个HelloViewModel.cs的ViewModel,此时的ViewModel的命名必须以ViewModel结尾,这是CM规定的命名规范,必须遵循,代码如下所示:
public class HelloViewModel : PropertyChangedBase {
public string Name {
get { return name; }
set {
name = value;
NotifyOfPropertyChange(() => Name);
NotifyOfPropertyChange(() => CanSayHello);
}
}
public bool CanSayHello {
get { return !string.IsNullOrWhiteSpace(name); }
}
public void SayHello() {
MessageBox.Show(string.Format("Hello {0}!", Name));
}
private string name;
}
另外,这个类继承于PropertyChangedBase, 这是Caliburn Micro提供的,用于自动属性更改通知,所以我们不需要实现INotifyPropertyChanged。
5.根据ViewModel的属性和方法,实现HelloView,此View的命名必须以View结尾,这是CM规定的命名规范,必须遵循,代码如下所示:
<Window.Resources>
<Style TargetType="TextBox">
<Setter Property="MinWidth" Value="200" />
<Setter Property="Margin" Value="10" />
<Setter Property="Padding" Value="4,2" />
<Setter Property="FontSize" Value="24" />
</Style>
<Style TargetType="Button">
<Setter Property="Margin" Value="10" />
<Setter Property="Padding" Value="20,0" />
</Style>
</Window.Resources>
<DockPanel>
<Button x:Name="SayHello" DockPanel.Dock="Right" Content="Say Hello" />
<TextBox x:Name="Name" />
</DockPanel>
说明:
1)视图名称应该以“View”结束并且开始部分要和对应的视图模型使用相同的名称。 对于我的例子,“HelloView”视图对应“HelloViewModel”。
2)此处Button的Name是SayHello,与HelloViewModel中的SayHello()函数同名,那么Button的Click事件将直接和此方法绑定(这是CM的机制)
3)TextBox的Name为Name,与HelloViewModel中的Name属性同名,那么TextBox的Text属性将和此属性绑定,ViewModel中Name属性的改变将显示在View上
6.建立好View和ViewModel的匹配后,子类化Bootstrapper,代码如下:
public class HelloBootstrapper : BootstrapperBase {
public HelloBootstrapper() {
Initialize();
}
protected override void OnStartup(object sender, StartupEventArgs e) {
DisplayRootViewFor<HelloViewModel>();
}
}
OnStartup()函数的DisplayRootViewFor<>()函数设置你想要在启动时使用的视图模型。
7.将HelloBootstrapper添加到Application.Resources,代码如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:HelloBootstrapper x:Key="bootstrapper"></local:HelloBootstrapper>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>


8.enjoy你的小代码

最后

以上就是粗心小蘑菇为你收集整理的Caliburn.Micro入门的全部内容,希望文章能够帮你解决Caliburn.Micro入门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部