设置在ControlTemplate中定义的控件的DataContext

时间:2018-06-25 14:13:15

标签: wpf xaml datacontext controltemplate

我正在努力设置使用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>

1 个答案:

答案 0 :(得分:0)

正如评论中所建议,我确实确实在后面的代码中覆盖了DataContext。因此,只需将

<controls:DriveControl DataContext="{Binding DriveDataContext}"/> 

可以工作-除非您是个虚拟人,并且忘记了您先前编写的代码(为防御起见-我正在检查Live Properties中的DataContext源,但显然“转到源”仅适用于XAML文件)。经验教训。