绑定到ItemsSource集合中每个项目的模板

时间:2012-03-02 20:31:34

标签: wpf binding datatemplate tabcontrol tabitem

我有一个严格模板化的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项的集合?

1 个答案:

答案 0 :(得分:1)

您需要将绑定源集合转换为标签项,因此items集合将是标签项。在[{3}}

的接受答案中有一个很好的转换器示例