我在将视图加载到 ContentControl 时遇到了一些问题。我试图让这个尽可能简单,所以我使用了 CM 附带的 Hello 项目。我确保 Hello 项目正确编译并运行。它显示一个带有文本框和一个按钮的窗口。文本框和按钮都在运行时连接到示例 ViewModel。
我修改了 ShellView.xaml 并将 StackPanel 控件替换为 Grid 控件,并设置了 4 行和 1 列的网格。我将文本框分配给第一行,将按钮分配给第二行,然后将两个单独的 ContentControl 分配给最后两行。
<Grid Width="800" Height="600">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" x:Name="Name" />
<Button Grid.Row="1" Grid.Column="0" x:Name="SayHello" Content="Click Me" />
<ContentControl Grid.Row="2" Grid.Column="0" x:Name="TopMenu"
VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"></ContentControl>
<ContentControl Grid.Row="3" Grid.Column="0" x:Name="BottomMenu"
VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"></ContentControl>
</Grid>
我在 ViewModels 文件夹中创建了两个单独的 C# 类,它们是 ViewModels,分别称为 TopMenuViewModel.cs 和 BottomMenuViewModel.cs。这两个类都扩展了 PropertyChangedBase 类。这只是模仿示例项目附带的 ShellViewModel.cs 类。
using System;
using Caliburn.Micro;
namespace TestWithCaliburnMicro.ViewModels
{
/// <summary>
/// Description of BottomMenuViewModel.
/// </summary>
public class BottomMenuViewModel : PropertyChangedBase
{
public BottomMenuViewModel()
{
}
}
我在 Views 文件夹中创建了两个单独的 WPF 用户控件,它们是对应的 View,分别称为 TopMenuView.xaml 和 BottomMenuView.xaml。我在每个 xaml 中添加了一个标签,其内容为“顶部菜单”或“底部菜单”,以区分两者。
<Grid>
<Label>Bottom Menu View</Label>
</Grid>
在 ShellViewModel.cs 类中,我创建了两个公共属性,其中只有“get”访问器设置为返回相应 ViewModel 的实例。
private BottomMenuViewModel _bottomMenu;
public BottomMenuViewModel BottomMenu {
get { return _bottomMenu; }
}
private TopMenuViewModel _topMenu;
public TopMenuViewModel TopMenu {
get { return _topMenu;}
}
为任一属性的 get 访问器添加中断表明在调试项目时调用了 get 访问器。我在 BottomMenuViewModel.cs 类的构造函数中添加了一个简单的语句,例如 int x = 0 并在该行中添加了一个中断,但是中断从未被击中,这对我来说意味着构造函数没有被调用,所以真的是这个类是不是创建的?
我相信我正在做的事情非常基础,并且已经阅读了 CM Codeplex 网站上的 All About Conventions 文档,并通过以下评论确认了逻辑:关于 stackoverflow 的先前问题
希望有人有时间阅读本文并为我指明正确的方向。谢谢。
GitHub 上的解决方案。注意:使用 SharpDevelop 4.x GitHub 解决方案制作