Привязка к шаблону каждого элемента в коллекции ItemsSource - PullRequest
0 голосов
/ 03 марта 2012

У меня сильно шаблонный 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?

1 Ответ

1 голос
/ 06 марта 2012

Вам необходимо преобразовать исходную коллекцию привязки в элементы вкладок, таким образом, коллекция элементов будет элементами вкладок. В принятом ответе есть довольно хороший пример конвертера для Как связать TabControl?

...