2012-02-15 92 views
10

我想在不同的页面是TabItems的应用程序中使用MVVM。通过绑定启用TabItem

为此,我使用我的视图模型(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属性设置为false

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

标签页的内容被禁用。但我真正想要的是也禁用Tabpage的标签,而不仅仅是内容。

感谢您的帮助!

回答

21

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

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

+1那的方式做到这一点:) – dowhilefor 2012-02-15 10:47:36

+0

太谢谢你了!这正是我所期待的。 – tabina 2012-02-15 10:54:04

+0

很高兴能帮到你! :) – Dror 2012-02-15 11:03:50