【发布时间】:2014-06-16 21:09:24
【问题描述】:
我的应用已通过 CM 启动并运行。 shell 视图包含多个 ContentControl,它们本身包含视图。这些是按约定分配的,因为它们的名称与视图模型中的属性匹配。
我有一个 WPF 窗口(至少它的类继承自 Window),它是从我的应用程序中使用 windowManager.ShowDialog(viewModel) 打开的。在这个窗口中,我再次有 ContentControls,但它们没有绑定到视图模型属性。
我已经尝试在窗口上设置cal:View.ApplyConventions="True",但这也无济于事。我还使用ViewModelBinder.Bind(viewmodel, view, null) bind vm 并在显示窗口之前查看 - 也不起作用。
如何确保我打开的窗口(模式对话框)使用相同的 CM 增强功能?
这是视图:
<Window x:Class="Client.Views.History.HistoryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro"
Title="Historie" Height="300" Width="300"
cal:View.ApplyConventions="True"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="64" />
<RowDefinition Height="*" />
<RowDefinition Height="20" />
</Grid.RowDefinitions>
<ContentControl x:Name="HeaderView" Grid.Row="0" Grid.Column="0" />
<ContentControl x:Name="RecordView" Grid.Row="1" Grid.Column="0" />
<Border Grid.Row="2" Grid.Column="0" Background="DarkKhaki" BorderThickness="2" BorderBrush="DarkSeaGreen" />
</Grid>
</Window>
显示边框以便加载视图。 DataContext 应该由 caliburn micro 设置。这是视图模型:
public class HistoryViewModel : PropertyChangedBase
{
#region Fields --------------------------------------------------------
private readonly HeaderViewModel headerView;
private readonly RecordViewModel recordView;
#endregion
public HistoryViewModel()
{
this.headerView = IoC.Get<HeaderViewModel>();
this.recordView = IoC.Get<RecordViewModel>();
}
public HeaderViewModel HeaderView
{
get { return this.headerView; }
}
public RecordViewModel RecordView
{
get { return this.recordView; }
}
}
构造函数运行,视图模型被创建(不为空)。但是属性HeaderView 和RecordView 永远不会被访问。
要启动它,我使用以下代码:
HistoryViewModel viewModel = IoC.Get<HistoryViewModel>();
windowManager.ShowDialog(viewModel);
它在像这样显式绑定模型时起作用:
<ContentControl x:Name="HeaderView" cal:View.Model="{Binding HeaderView}" Grid.Row="0" Grid.Column="0" />
<ContentControl x:Name="RecordView" cal:View.Model="{Binding RecordView}" Grid.Row="1" Grid.Column="0" />
但我想知道如何重新启用标准机制。
【问题讨论】:
-
查看一些代码可能会有所帮助。窗口本身的
DataContext是否正确,并且预期的视图至少显示正确吗? -
@Chris 我添加了一些代码。是的,窗口的视图已显示 - 仅显示其 ContentControls 的内容。
标签: c# mvvm caliburn.micro