2012-01-18 68 views
1

我有一个TabControl有其SelectedIndex属性绑定到一个布尔值,像这样:为什么我的DataTrigger没有更新TabControl的SelectedIndex属性?

<TabControl> 
    <TabControl.Style> 
     <Style TargetType="TabControl"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=IsRunning, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
        <Setter Property="SelectedIndex" Value="1" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.Style> 
    <TabItem Header="Foo" /> 
    <TabItem Header="Bar" /> 
</TabControl> 

TabControl只能切换到第二个选项卡,如果IsRunning属性变为True,但现在的问题是,只要IsRunning属性发生更改,TabControl就不会自行更新以显示第二个TabItem

有没有办法通过XAML做到这一点,或者我有我的视图模型来实现SelectedIndex属性,直接结合到TabControlSelectedIndex

+1

适用于此。您的底层ViewModel(TabControl的DataContext)在IsRunning更改时引发PropertyChanged事件吗? – 2012-01-18 10:42:28

+0

有意思......是的,PropertyChanged事件肯定会引发。 – Flagbug 2012-01-18 10:52:03

+1

如果将TabControl上的SelectedIndex设置为默认值[这会成为问题](http://msdn.microsoft.com/zh-cn/library/ms743230.aspx)。 – 2012-01-18 11:21:25

回答

0

这对我来说就像预期的那样,如果属性更改为真正的标签开关。也许有一个problem with the binding? (或者我误解了这个问题?)

0

这是一条古老的线索,但谁知道别人可能会对此产生影响,就像我寻找答案一样。

解决方案:只需在TabControl样式中添加一个setter以将SelectedIndex设置为初始值即可。例如Setter Property =“SelectedIndex”Value =“0”

<TabControl> 
    <TabControl.Style> 
     <Style TargetType="TabControl"> 
      <Setter Property="SelectedIndex" Value="0" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=IsRunning, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
        <Setter Property="SelectedIndex" Value="1" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.Style> 
    <TabItem Header="Foo" /> 
    <TabItem Header="Bar" /> 
</TabControl> 
相关问题