Подтвердить что ты не робот

Как привязать к данным в Datatemplate ContentControl

У меня есть следующий упрощенный пример:

    <Window x:Class="TemplateBinding.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary
                            Source="pack://application:,,,/TemplateBinding;component/PersonTemplate.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Window.Resources>
        <Grid>
            <ContentControl ContentTemplate="{StaticResource PersonTemplate}" />
        </Grid>
    </Window>

С

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

        <DataTemplate x:Key="PersonTemplate">
            <Border Width="100" Height="100" Background="RosyBrown">
                <TextBlock Text="{Binding Path=FirstName}" VerticalAlignment="Center" TextAlignment="Center"/>
            </Border>
        </DataTemplate>

    </ResourceDictionary>

как мой DataTemplate в отдельном файле ResourceDictionary.

Я установил свой DataContext в Construcor моего MainWindow и проверил его, просто отображая первое имя, подобное этому: <ContentControl Grid.Row="1" Content="{Binding FirstName}"/>.

В другом сценарии, когда я использую DataTemplate с ListBox, я выполняю привязку точно так же, как и в моем DataTemplate, и он просто работает.

Я знаю, что DataTemplate работает, кроме привязки, потому что он правильно показывает размер и цвет фона.

Что я делаю неправильно? Как будет выглядеть привязка в моей DataTemplate?

4b9b3361

Ответ 1

Вам необходимо привязать Content -Property ContentControl

<ContentControl Content="{Binding}" ContentTemplate="{StaticResource PersonTemplate}" />

Это установит DataContext ContentControl как Content элемента управления.

Установка только свойства ContentTemplate недостаточно. ContentControl не подразумевает использование своего DataContext как содержимого.