27

次の単純化された例があります。

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

別の ResourceDictionary ファイルの DataTemplate として。

MainWindow の Contrucor に DataContext を設定し、次のように名を表示するだけで確認しました<ContentControl Grid.Row="1" Content="{Binding FirstName}"/>

DataTemplate を使用する別のシナリオでは、DataTemplate でListBoxまったく同じ方法で Binding を実行すると、うまくいきます。

サイズと背景色が正しく表示されるため、バインディングを除いて DataTemplate が機能していることはわかっています。

私は何を間違っていますか?DataTemplate の Binding はどのように見える必要がありますか?

4

1 に答える 1

64

Contentのプロパティをバインドする必要がありますContentControl

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

これにより、ContentControl の DataContext がコントロールのコンテンツとして設定されます。

プロパティを設定するだけでContentTemplateは不十分です。ContentControl は、その DataContext を Content として暗黙的に使用しません。

于 2013-03-13T15:18:43.797 に答える