私は次の簡単な例を持っています:
<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のConstrucorでDataContextを設定し、次のように名を表示するだけで検証しました:<ContentControl Grid.Row="1" Content="{Binding FirstName}"/>
。
ListBox
でDataTemplateを使用する他のシナリオでは、DataTemplateでまったく同じ方法でBindingを実行し、動作します。
DataTemplateはサイズと背景色を正しく表示するため、バインディング以外は機能していることを知っています。
私は何を間違えていますか? DataTemplateのBindingはどのように見える必要がありますか?
ContentControlのContent
- Propertyをバインドする必要があります
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource PersonTemplate}" />
これにより、ContentControlのDataContextがコントロールのコンテンツとして設定されます。
ContentTemplate
プロパティのみを設定するだけでは不十分です。 ContentControlは、そのDataContextをコンテンツとして暗黙的に使用しません。