我正在努力设置使用ControlTemplate创建的Usercontrol的DataContext。
在下面的代码中,我希望将DriveControl的DataContext设置为其父级的Datacontext字段(伪代码:DriveControl.DataContext = Parent.DataContext.DriveDataContext
)。尝试将其设置为ControlTemplate本身或不设置任何样式的样式。
我正在尝试仅在XAML中做到这一点。
<ContentControl>
<ContentControl.Resources>
<ControlTemplate x:Key="DriveTemplate">
<controls:DriveControl/>
</ControlTemplate>
<DataTemplate DataType="controls:DriveControl">
</DataTemplate>
<ControlTemplate x:Key="TimeTemplate">
<controls:TimeControl/>
</ControlTemplate>
<ControlTemplate x:Key="ApartamentTemplate">
<controls:ApartamentControl/>
</ControlTemplate>
</ContentControl.Resources>
<ContentControl.Style>
<Style TargetType="ContentControl">
<!--<Setter Property="Template" Value="{StaticResource DriveTemplate}"/>-->
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentMode }" Value="Drive">
<Setter Property="Template" Value="{StaticResource DriveTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding CurrentMode }" Value="SetTime">
<Setter Property="Template" Value="{StaticResource TimeTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding CurrentMode }" Value="ChooseApartament">
<Setter Property="Template" Value="{StaticResource ApartamentTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
答案 0 :(得分:0)
正如评论中所建议,我确实确实在后面的代码中覆盖了DataContext。因此,只需将
<controls:DriveControl DataContext="{Binding DriveDataContext}"/>
可以工作-除非您是个虚拟人,并且忘记了您先前编写的代码(为防御起见-我正在检查Live Properties中的DataContext源,但显然“转到源”仅适用于XAML文件)。经验教训。