Caliburn.Micro入门

12 篇文章 0 订阅

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你的小代码
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Caliburn.Micro是一套基于XAML的MVVM模式的开发框架,它是一个小巧而强大的框架。在Caliburn.Micro中,只需要按照约定将View的名字加上后缀ViewModel,就是它的ViewModel的名字,例如MainPage和MainPageViewModel。Caliburn.Micro会自动将ViewModel绑定到View的DataContext,并且如果ViewModel的属性名和控件的名称相同,它会自动进行绑定。 MVVM模式是一种用于开发WPF应用程序的架构模式,它将应用程序分为三个部分:Model、View和ViewModel。ViewModel负责处理View与Model之间的交互,以及将Model的数据呈现给View。MVVM模式的目标是编写优雅、可测试、可维护和可扩展的表示层代码,而Caliburn.Micro努力超越简单的MVVM实现,使开发变得更加容易。 在MVVM框架中,ViewModel通常需要实现INotifyPropertyChanged接口,以便在ViewModel的属性更改时能够自动发出事件通知View。在Caliburn.Micro中,ViewModel通常可以继承自PropertyChangedBase或Screen,这两个类都实现了INotifyPropertyChanged接口。如果继承自Screen,ViewModel可以像窗口一样进行激活、关闭等操作。 综上所述,Caliburn.Micro是一个基于XAML的MVVM框架,它使开发WPF应用程序变得更加简单和高效。它提供了自动绑定ViewModel到View的功能,同时也支持INotifyPropertyChanged接口,使ViewModel能够与View进行双向通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C# WPF MVVM开发框架Caliburn.Micro入门介绍①](https://blog.csdn.net/zls365365/article/details/121711023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [WPF MVVM框架之Caliburn.Micro(一)简介](https://blog.csdn.net/Accidentabird/article/details/130192466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值