最近在学习WPF的MVVM,刚好项目里用到了caliburn.micro,之前是别人在工程里添加了这个框架,我直接使用,但一直不知道怎么重头开始搭建。
最近有时间了,上网查了一些资料,新建了一个WPF项目并学习了如何添加caliburn.micro,在这里记录有一下。
大家看了之后如果有什么疑问欢迎提出,我如何会的话也将进行补充
1,首先使用VS创建一个WPF工程,这里我使用的是VS2019
2,在Nuget中搜索caliburn.micro,并添加到工程中
3,将项目中的mainwindows.xaml删除
4,新建一个界面,这里我命名为StartView和StartViewModel
StartViewModel.cs:
using Caliburn.Micro;
using System.ComponentModel.Composition;
namespace HIMVVM.ViewModels
{
class StartViewModel : Caliburn.Micro.Screen
{
IWindowManager _windowManager;
[ImportingConstructor]
public StartViewModel()
{
_windowManager = IoC.Get<IWindowManager>();
}
public void Open()
{
//你可以在这做一些事情,这里我打开了另外一个界面
_windowManager.ShowWindow(new MainViewModel(), null);
TryClose();
}
}
}
StartView.xaml:
<Window x:Class="HIMVVM.Views.StartView"
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"
mc:Ignorable="d"
Title="StartView" Height="200" Width="200">
<Grid Background="Gray">
<Button x:Name="Open" Content="开启MVVM" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75"/>
</Grid>
</Window>
5,新建一个类继承BootstrapperBase,这里我命名为MyBootstrapper
using Caliburn.Micro;
using HIMVVM.ViewModels;
using System.Windows;
namespace HIMVVM
{
class MyBootstrapper : BootstrapperBase
{
public MyBootstrapper()
{
Initialize();//初始化框架
}
protected override void OnStartup(object sender, StartupEventArgs e)
{
DisplayRootViewFor<StartViewModel>();//显示界面
}
}
}
6,打开app.xaml,进行如下修改,主要是删除了startup,并添加了Application.Resources部分
<Application x:Class="HIMVVM.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HIMVVM">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:MyBootstrapper x:Key="bootstrapper"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>