我正在使用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
此外...如果我将ItemTemplate更改为ContentTemplate,则绑定工作正常(但内容不在标题中)
答案 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>
这并不能解释根本原因,但这是一个我可以忍受的简短解决方法