WPF ウィンドウで定義された TabControl に動的に追加されるカスタム TabItem を作成しようとしています。カスタム コントロールには、テンプレートの特定の部分にバインドするデータを含むオブジェクトがあります。
<Style TargetType="{x:Type local:EntityTabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:EntityTabItem}">
<Border>
<Grid>
<Border x:Name="borderTop" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"/>
<StackPanel Orientation="Horizontal" Margin="0,0,2,0">
<!-- Want to bind the FileName to this TextBlock -->
<TextBlock VerticalAlignment="Center" Text="{Binding Path=Entity.FileName}" Margin="-1,0,0,0" Padding="6,1,10,1"/>
<Button x:Name="closeButton" VerticalAlignment="Center" Content="X" Style="{StaticResource TabCloseButton}"/>
</StackPanel>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Background="White">
<!-- Want to bind the FileText to this TextBox -->
<TextBox Margin="15,0,0,0" BorderBrush="{x:Null}" Text="{Binding Path=Entity.FileText}"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
これは、カスタム コントロール CS ファイルです。
public class EntityTabItem : TabItem
{
public Entity MyEntity { get; set; }
public EntityTabItem(string path)
{
this.MyEntity = new Entity(path);
}
static EntityTabItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(EntityTabItem), new FrameworkPropertyMetadata(typeof(EntityTabItem)));
}
}
どこかに DataBinding/Source を設定する必要があることは確かですが、TextBlock のバインディングを機能させるためにどこにバインドすればよいかわかりません。
正直なところ、DataBinding について頭を悩ませることはまったくできません。半分の時間は、方法を知らずに問題なく動作し、残りの半分の時間は何もしません。
「エンティティ」オブジェクトを DependencyProperty として実装しようとしましたが、それも機能しませんでした。CS でカスタム TabItem を作成しているだけなので (XAML で直接使用されることはありません)、これは問題になりますか?