Я следовал руководству по Winforms и конвертировал его в WPF и MVVM, используя Caliburn.Micro. Однако в учебнике winforms он вызывает новую форму.
CreatePrizeForm frm = new CreatePrizeForm();
frm.Show;
Я думал, что мог бы использовать Caliburn.Micro ActivateItem, чтобы сделать подобное. Я включил код моего эксперимента.
Моя ShellViewModel
public class ShellViewModel : Conductor<object>
{
public void LoadFormOne()
{
MessageBox.Show("You are about to activate FirstChildViewModel");
ActivateItem(new FirstChildViewModel());
}
public void LoadFormTwo()
{
MessageBox.Show("You are about to activate SecondChildViewModel");
ActivateItem(new SecondChildViewModel());
}
}
Мой Shellview
<Window x:Class="ConductorTest.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:ConductorTest"
mc:Ignorable="d"
Title="ShellViewModel" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Column="1" Grid.Row="1" x:Name="LoadFormOne" Content="Load Form One" />
<Button Grid.Column="1" Grid.Row="3" x:Name="LoadFormTwo" Content="Load Form Two" />
</Grid>
</Window>
ChildViewModel
public class FirstChildViewModel : Screen
{
public FirstChildViewModel()
{
}
}
A ChildView
<Window x:Class="ConductorTest.FirstChildView"
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:ConductorTest"
mc:Ignorable="d"
Title="FirstChildView" Height="450" Width="800">
<Grid>
<TextBlock>You are now in First Child View</TextBlock>
</Grid>
</Window>
Итак, я подумал, что если я нажму кнопку LoadFormOne, она выполнится,
ActivateItem(new FirstChildViewModel());
, которая затем создаст FirstChildViewModel (), например,
DisplayRootViewFor<ShellViewModel>();
в стандартном bootstrapper.cs запускает новую форму WPF.
Но, очевидно, нет.
Чего мне не хватает или нет Caliburn.Micro предоставляет простой способ сделать это?
Спасибо