以编程方式为HeaderTemplate指定绑定

时间:2014-05-06 06:38:25

标签: wpf binding datatemplate tabcontrol attachedbehaviors

我在TabControl中虚拟化视图时遇到了各种问题。幸运的是,我发现了一些我认为可以解决this CodeProject article中所有问题的东西。

此解决方案引入了一个问题,那就是它会破坏我的HeaderTemplate。选项卡标题与内容控件具有相同的内容。

我的视图使用TabControl,如下所示:

<TabControl
        behaviors:TabItemGeneratorBehavior.ItemsSource="{Binding MyItems, Mode=OneWay}"
        behaviors:TabItemGeneratorBehavior.SelectedItem="{Binding MySelectedItem, Mode=TwoWay}">

    <TabControl.Resources>
        <Style TargetType="TabItem">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <ContentPresenter>
                            <ContentPresenter.Content>
                                <TextBlock Text="{Binding Title}"/>
                            </ContentPresenter.Content>
                        </ContentPresenter>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>
</TabControl>

behaviors:TabItemGeneratorBehavior来自CodeProject文章。 TabItemGeneratorBehavior内部是一种生成TabItems的方法:

private void AddTabItem(object item)
{
    var contentControl = new ContentControl();
    var tab = new TabItem
        {
            DataContext = item,
            Content = contentControl,
            HeaderTemplate = _tabControl.ItemTemplate
        };

    contentControl.SetBinding(ContentControl.ContentProperty, new Binding());
    tab.SetBinding(HeaderedContentControl.HeaderProperty, new Binding());

    _tabControl.Items.Add(tab);
}

我认为我的问题在于为HeaderProperty设置绑定的行。如何设置绑定,以便它使用我上面的XAML中定义的HeaderTemplate

1 个答案:

答案 0 :(得分:0)

OP在这里。

解决方案是在创建HeaderTemplate时删除TabItem分配:

var tab = new TabItem
    {
        DataContext = item,
        Content = contentControl,
        // HeaderTemplate = _tabControl.ItemTemplate
    };