1. 基本配置,Actions(动作)和Conventions(约定)-翻译

开始一个项目

  1. 打开Visual Studio。
  2. 创建一个新的WPF应用,并命名为“Caliburn.Micro.Hello”
  3. 添加一个“Caliburn.Micro”的Nuget包的引用。
  4. 删除“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的方式

  1. 创建一个ViewModel:创建一个类,并命名为“ShellViewModel”
  2. 打开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(引导器)

  1. 创建一个新的类,并命名为“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,但不知道如何在没有视图的情况下渲染它。

创建视图

  1. 创建一个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-1-1

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

Caliburn.Micro-1-2

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。

posted @ 2023-10-11 19:24  鱼洄  阅读(138)  评论(0)    收藏  举报