DataTemplate不会显示TabControl

时间:2016-05-18 12:18:32

标签: c# wpf data-binding datatemplate tabcontrol

我正在使用DataBinding来显示ItemsSource中的所有控件

        <TabControl Grid.Row="1" TabStripPlacement="Left" ItemsSource="{Binding Source={StaticResource WorkflowSelector}, Path=Workflows}" SelectedIndex="0">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <Label Content="{Binding PluginName}"></Label>
            </DataTemplate>
        </TabControl.ItemTemplate>
    </TabControl>

WorkflowSelector是我的ViewModel,它包含应该在TabControl中显示的所有控件的列表。

我创建了一个itemTemplate来显示Tab中的PluginName(公共属性) 但没有显示任何内容。

如果我检查Visual树,我可以看到Tabcontrol的数据绑定,包含1个具有Property PluginName的Item。 标签的BindingExpression的评估值为空

我注意到的第一件事是ContentPresenter没有DataContext,而Border确实有正确的DataContext

Visual Tree of the application; ContentPresenter does not hold the DataContext

此外...如果我将ItemTemplate更改为ContentTemplate,则绑定工作正常(但内容不在标题中)

2 个答案:

答案 0 :(得分:0)

要更改HeaderTemplate的{​​{1}},您应该设置TabControl的样式并更改TabItem

HeaderTemplate

答案 1 :(得分:0)

因为我在Visual树中看到DataContext在层次结构中设置得更高,所以我将数据绑定更改为:

 <Label Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}, Path=DataContext.PluginName}"></Label>

这并不能解释根本原因,但这是一个我可以忍受的简短解决方法