25

の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ファイルの私のDataTemplateとして

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

を。

私は自分のMainWindowのConstrucorで自分のDataContextを設定し、このような最初の名前を表示するだけでそれを確認しました:<ContentControl Grid.Row="1" Content="{Binding FirstName}"/>

私はListBoxでDataTemplateを使用していますが、私はDataTemplateと全く同じ方法でバインディングを行います。

サイズと背景色が正しく表示されているため、DataTemplateがバインディング以外で動作していることがわかりました。

私は間違っていますか?私のDataTemplateのバインディングはどのように見える必要がありますか?

答えて

54

あなたがコントロールの内容としてContentControlにするのDataContextを設定しますContentControlに

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

これのContent -Propertyをバインドする必要があります。

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

+1

これに関するドキュメントへのリンクがありますか?それは私の問題を完全に解決しましたが、他の邪魔があれば興味があります。 –

関連する問題