通过绑定启用TabItem

tab*_*ina 10 wpf binding tabcontrol datatemplate mvvm

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

为此,我使用了一个可观察的视图模型(Items)集合,并将其绑定到tabcontrols ItemSource.

对于每个视图模型,我创建了一个单独的数据模板来呈现正确的视图,如下所示:

<DataTemplate DataType="{x:Type baseVm:AViewModel}">
  <baseVw:AView /> 
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

要在选项卡的标题中显示正确的名称,我创建了另一个数据模板,以应用于每个选项卡控件的元素:

<DataTemplate x:Key="ViewModelTabTemplate">
  <DockPanel>
    <ContentPresenter Content="{Binding Path=Name}"/>
  </DockPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

选项卡控件如下所示:

<TabControl x:Name="myTabControl" 
            ItemsSource="{Binding Items}" 
            ItemTemplate="{DynamicResource ViewModelTabTemplate}">
</TabControl>
Run Code Online (Sandbox Code Playgroud)

我现在要做的是在包含集合的视图模型中启用/禁用选项卡.视图模型的基类包含一个依赖项属性IsEnabled,我想将它绑定到视图.如果我直接在视图中这样做:

IsEnabled="{Binding IsEnabled, FallbackValue=true}"
Run Code Online (Sandbox Code Playgroud)

当我将IsEnabled属性设置为false时,标签页的内容被禁用.但我真正想要的是也禁用tabpage的标签而不仅仅是内容.

谢谢你的帮助!

Dro*_*ror 22

也许你可以试试这样的东西 -

<TabControl>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
             <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>        
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
Run Code Online (Sandbox Code Playgroud)