1. 基本配置,Actions(动作)和Conventions(约定)-翻译
开始一个项目
- 打开Visual Studio。
- 创建一个新的WPF应用,并命名为“Caliburn.Micro.Hello”
- 添加一个“Caliburn.Micro”的Nuget包的引用。
- 删除“MainWindow.xaml”文件,并且移除App.xaml里面的“StartupUri”
1 <Application x:Class="Caliburn.Micro.Hello.App" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:local="clr-namespace:Caliburn.Micro.Hello"> 5 <Application.Resources> 6 7 </Application.Resources> 8 </Application>
使用ViewModel-First的方式
- 创建一个ViewModel:创建一个类,并命名为“ShellViewModel”
- 打开ShellViewModel.cs文件,并完成下面的代码
1 using System.Windows; 2 3 namespace Caliburn.Micro.Hello.ViewModels 4 { 5 public class ShellViewModel : PropertyChangedBase 6 { 7 string name; 8 9 public string Name 10 { 11 get { return name; } 12 set 13 { 14 name = value; 15 NotifyOfPropertyChange(() => Name); 16 NotifyOfPropertyChange(() => CanSayHello); 17 } 18 } 19 20 public bool CanSayHello 21 { 22 get { return !string.IsNullOrWhiteSpace(Name); } 23 } 24 25 public void SayHello() 26 { 27 MessageBox.Show(string.Format("Hello {0}!", Name)); //Don't do this in real life :) 28 } 29 }
注意,ShellViewModel必须继承自PropertyChangedBase。这是一个基类,它实现了属性更改通知的基础结构,并自动执行UI线程封送。迟早会派上用场的:)
创建Bootstrapper(引导器)
- 创建一个新的类,并命名为“HelloBootstrapper”,代码如下:
1 namespace Caliburn.Micro.Hello { 2 public class HelloBootstrapper : BootstrapperBase { 3 public HelloBootstrapper() { 4 Initialize(); 5 } 6 7 protected override void OnStartup(object sender, StartupEventArgs e) { 8 DisplayRootViewFor<ShellViewModel>(); 9 } 10 } 11 }
Bootsrapper允许您使用DisplayRootViewFor<TViewModel>()指定根视图模型的类型。“根视图模型”是一个ViewModel。Micro将实例化并使用来显示您的应用程序。
接下来,我们需要实现“HelloBootstrapper”,这样它就会在启动时运行。
要做到这一点,更新你的App.xaml,将引导程序添加到你的资源中,像这样:
1 <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 3 xmlns:local="clr-namespace:Caliburn.Micro.Hello" 4 x:Class="Caliburn.Micro.Hello.App"> 5 <Application.Resources> 6 <ResourceDictionary> 7 <ResourceDictionary.MergedDictionaries> 8 <ResourceDictionary> 9 <local:HelloBootstrapper x:Key="bootstrapper" /> 10 </ResourceDictionary> 11 </ResourceDictionary.MergedDictionaries> 12 </ResourceDictionary> 13 </Application.Resources> 14 </Application>
我们所要做的就是在Application中放置一个Caliburn.Micro引导程序。Resources和它会完成剩下的工作。
Caliburn.Micro创建了ShellViewModel,但不知道如何在没有视图的情况下渲染它。
创建视图
- 创建一个User Control(用户控件)并命名为“ShellView”。xaml代码如下:
1 <UserControl x:Class="Caliburn.Micro.Hello.ShellView" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 Height="450" Width="800"> 5 <StackPanel> 6 <Label Content="Hello please write your name" /> 7 <TextBox x:Name="Name" /> 8 <Button x:Name="SayHello" Content="Click Me" /> 10 </StackPanel> 11 </UserControl>
重新运行应用程序,应该看到如下界面:

尝试在文本框种输入一些内容,按钮会变的可用,单击按钮会显示一个消息。

Caliburn.Micro是怎样工作的
Caliburn.Micro使用一个简单的命名约定来定位ViewModels的Views。本质上,它将“ViewModel”的名称中移除“Model”。
比如给定的ViewModel为MyApp.ViewModels.MyViewModel,则会去寻找MyApp.Views.MyView。
查看View和ViewModel,您可以看到带有x:Name= " Name "的TextBox被绑定到ViewModel的" Name "属性上。您还可以看到带有x:Name= " SayHello "的按钮被绑定到ViewMModel上具有相同名称的方法。CanSayHello属性通过禁用按钮来保护对SayHello操作的访问。这些都是Caliburn.Micro的基础,是ActionMessage和Conventions功能。
还有更多的东西要展示。接下来,我们可以集成一个IoC容器,比如MEF。

浙公网安备 33010602011771号