Установка DataContext элемента управления, определенного в ControlTemplate - PullRequest
0 голосов
/ 25 июня 2018

Я борюсь с настройкой DataContext Usercontrol, созданного с помощью ControlTemplate. В приведенном ниже коде я хотел бы, чтобы DataContext DriveControl был установлен в поле родительского 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 голосов
/ 25 июня 2018

Как и предполагалось в комментарии, я действительно переписывал DataContext в коде позади.Так что просто поместить

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

работает - если вы не дурак и не забыли код, который вы написали ранее (в мою защиту - я проверял источник DataContext в Live Properties, но, видимо, только "Перейти к источнику"работает для файлов XAML).Урок выучен.

...