[Caliburn.Micro专题][1]快速入门 1. 什么是Caliburn.Micro? 2. 我是否需要学习CM框架? 3. 如何下手?
开场白:本系列为个人学习记录,才疏学浅,存在表述或理解错误,请多指教。分享不易,和谐交流,勿喷。
一个基于WPF的MVVM框架。本系列文档中将一直会把Caliburn.Micro框架简称为CM框架。
2. 我是否需要学习CM框架?
如果你需要基于开发一个运行在Windows平台上的GUI程序,那么CM框架是个不错的选择。
3. 如何下手?
3.1 需要理解以下几个概念:
- Xmal:界面。类xml的界面描述语言。通常需要一个后台.cs文件。
- Bootstrapper: 启动器。可以理解为它封装了程序启动的过程。
- Views:视图。使用xmal语言描述界面布局和元素。
- ViewModels: 为界面显示提供数据和逻辑支撑。
3.2 工程概览
开发环境: VS 2019
3.3 示例代码
<!-- App.xaml -->
<Application x:Class="Caliburn.Micro.Demo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Caliburn.Micro.Demo">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:Bootstrapper x:Key="bootstrapper"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
//Bootstrapper.cs
using Caliburn.Micro.Demo.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace Caliburn.Micro.Demo
{
public class Bootstrapper : BootstrapperBase
{
public Bootstrapper()
{
Initialize();
}
protected override void OnStartup(object sender, StartupEventArgs e)
{
DisplayRootViewFor<ShellViewModel>();
}
}
}
<!-- ShellView.xaml -->
<Window x:Class="Caliburn.Micro.Demo.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Caliburn.Micro.Demo.Views"
xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d"
Name="HandwriterNameInXaml"
Title="ShellView" Height="300" Width="500">
<Grid>
</Grid>
</Window>
//ShellViewModel.cs
using Caliburn.Micro.Demo.Views;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace Caliburn.Micro.Demo.ViewModels
{
public class ShellViewModel
{
}
}