我想在不同页面为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的标签,而不仅仅是内容。
感谢您的帮助!
答案 0 :(得分:22)
也许你可以尝试这样的事情 -
<TabControl>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>