我有一个严格模板化的TabControl - 在设计上类似于找到here的Scrollable Tab Control。与链接教程一样,我在最右边有一个“菜单”按钮,显示TabControl中所有选项卡的列表。通过选择其中一个菜单项,您可以立即跳转到该选项卡。
因此设置了MenuItem样式(假设我们绑定了一个TabItems集合):
<Style x:Key="TabMenuItem" TargetType="{x:Type MenuItem}">
<!-- This will help us bind to the Header of a TabItem -->
<Setter Property="Header" Value="{Binding Path=Header}" />
<Setter Property="IsEnabled" Value="{Binding Path=IsEnabled}" />
<Setter Property="IsCheckable" Value="{Binding Path=IsEnabled}" />
<Setter Property="IsChecked" Value="{Binding Path=IsSelected}" />
</Style>
这些项目在TabControl模板中绑定如下:
<MenuItem ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=Items}"
ItemContainerStyle="{StaticResource TabMenuItem}" />
当TabControl由普通TabItems 填充时,这可以正常工作。如果TabItems是DataTemplate的结果,当我的TabControl绑定到ViewModel列表时,它将停止工作。我的ViewModel不包含我的菜单项引用的那些属性 - 只有生成的模板TabItem。
所以我的最终问题是;是否有一些语法允许我绑定到模板(TabItems)的集合,而不是基本ViewModel项的集合?
答案 0 :(得分:1)
您需要将绑定源集合转换为标签项,因此items集合将是标签项。在[{3}}
的接受答案中有一个很好的转换器示例