我只想切换我的View(UserControl)xaml的某些部分。 例如,我希望能够仅更改第2个网格。
<Grid> //main grid
<Grid Name="1" Grid.Row="1"/>
<Grid Name="2" Grid.Row="2"/>
</Grid
我试过这样的事:
<UserControl.Resources>
<ControlTemplate x:Key="UsualMode">
<Grid>
...
</Grid>
</ControlTemplate>
</UserControl.Resources>
<Grid> //main grid
<Grid Name="1" Grid.Row="1"/>
<ControlTemplate Name="2" Grid.Row="2" Template="{StaticResource UsualMode}"/>
</Grid>
然后,通过使用触发器和绑定,我将能够切换模板。 不幸的是,由于“未找到Bootstrapper.cs”异常,这对我不起作用。 我该怎么办?我不能使用指挥 - &gt;必须只加载一个视图。
答案 0 :(得分:1)
http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions
阅读有关视图分辨率的基础知识
基本上,您会在视图中创建以下内容:
<UserControl.Resources>
<ControlTemplate x:Key="UsualMode">
<Grid>
...
</Grid>
</ControlTemplate>
</UserControl.Resources>
<Grid> //main grid
<Grid Name="1" Grid.Row="1"/>
<ContentControl x:Name="ChildViewModel" cal:View.Context="{Binding ContextBinding}" />
</Grid>
您的父视图模型需要具有“上下文”属性和容纳子VM的属性:
public class ParentViewModel
{
public SomeViewModel ChildViewModel { get; private set; }
public string ContextBinding { get; private set; } // make sure you implement INPC on these properties as is the usual
}
然后,您的视图将根据ContextBinding
字符串进行解析(根据上述CM惯例)。
所以如果你要更新字符串:
ContextBinding = "DetailedView";
CM然后会更新UI并尝试在当前VM名称空间的子名称空间中查找名为DetailedView
的视图
如果您不想拥有子VM,您实际上可以提前启动CM约定并在当前VM上应用上下文,但在这种情况下,您需要创建两个几乎完全相同的视图来自您想要“换出”的区域。
我的偏好是创建一个子VM来处理将交换视图的子区域,如上所示