通过绑定启用TabItem

时间:2012-02-15 10:11:05

标签: wpf binding mvvm datatemplate tabcontrol

我想在不同页面为TabItems的应用程序中使用MVVM。

为此,我使用了一个可观察的视图模型(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时,标签页的内容被禁用。但我真正想要的是也禁用tabpage的标签,而不仅仅是内容。

感谢您的帮助!

1 个答案:

答案 0 :(得分:22)

也许你可以尝试这样的事情 -

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