web-dev-qa-db-fra.com

Comment lier aux données dans un modèle de données d'un ContentControl

J'ai l'exemple simplifié suivant:

    <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>

Avec:

    <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>

comme mon DataTemplate dans un fichier ResourceDictionary séparé.

J'ai défini mon DataContext dans le constructeur de ma fenêtre principale et l'ai vérifié en affichant simplement le prénom comme ceci: <ContentControl Grid.Row="1" Content="{Binding FirstName}"/>.

Dans un autre scénario où j'utilise un DataTemplate avec un ListBox je fais la liaison exactement de la même manière dans mon DataTemplate et cela fonctionne juste.

Je sais que le DataTemplate fonctionne sauf la liaison car il affiche correctement la taille et la couleur d'arrière-plan.

Qu'est-ce que je fais mal? À quoi ressemblerait la liaison dans mon DataTemplate?

26
markus s

Vous devez lier la propriété Content- de ContentControl

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

Cela définira le DataContext du ContentControl comme contenu du contrôle.

Définir uniquement la propriété ContentTemplate ne suffit pas. ContentControl n'utilise pas implicitement son DataContext comme contenu.

56
Jehof