У меня сильно шаблонный TabControl - по дизайну похож на 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 заполнен normal TabItems . Он перестает работать, если TabItems являются результатом DataTemplate, когда мой TabControl привязан к списку ViewModels. Мои ViewModels не содержат те свойства, на которые ссылается мой элемент меню - только результирующий TabItem шаблона.
Итак, мой последний вопрос: есть ли какой-то синтаксис, который позволяет мне связывать с коллекцией шаблонов (TabItems), а не с коллекцией базовых элементов ViewModel?