Включить TabItem через Binding - PullRequest
       30

Включить TabItem через Binding

10 голосов
/ 15 февраля 2012

Я хочу использовать MVVM в приложении, где разные страницы являются TabItems.

Для этого я использую наблюдаемую коллекцию моих моделей представлений (Items) и привязываю ее к tabcontrols ItemSource.

Для каждой модели представления я создал отдельный шаблон данных для отображения правильного представления следующим образом:

<DataTemplate DataType="{x:Type baseVm:AViewModel}">
  <baseVw:AView /> 
</DataTemplate>

Чтобы отобразить правильное имя в заголовке вкладки, я создал другой шаблон данных, который будет применяться к каждому изэлементы элемента управления вкладками:

<DataTemplate x:Key="ViewModelTabTemplate">
  <DockPanel>
    <ContentPresenter Content="{Binding Path=Name}"/>
  </DockPanel>
</DataTemplate>

Элемент управления вкладками выглядит следующим образом:

<TabControl x:Name="myTabControl" 
            ItemsSource="{Binding Items}" 
            ItemTemplate="{DynamicResource ViewModelTabTemplate}">
</TabControl>

Теперь я хочу включить / отключить вкладки из модели представления, содержащейколлекция.Базовый класс модели представления содержит свойство зависимости IsEnabled, и я хотел бы связать это с представлениями.Если я сделаю это прямо в виде, подобном следующему:

IsEnabled="{Binding IsEnabled, FallbackValue=true}"

, содержимое вкладки будет отключено, когда я поверну свойство IsEnabled в false.Но что я действительно хочу, так это отключить вкладку вкладки, а не только ее содержимое.

Спасибо за любую помощь!

1 Ответ

22 голосов
/ 15 февраля 2012

Может быть, вы могли бы попробовать что-то вроде этого -

<TabControl>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
             <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>        
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
...