为什么我的DataTrigger不更新TabControl的SelectedIndex属性?

时间:2012-01-18 10:24:51

标签: c# wpf xaml triggers tabcontrol

我有一个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属性更改为IsRunningTrue应该只切换到第二个标签,但现在的问题是IsRunning属性更改时,TabControl不会更新自身以显示第二个TabItem

有没有办法通过XAML执行此操作,还是必须在我的viewmodel中实现SelectedIndex属性,该属性直接绑定到SelectedIndex的{​​{1}}?

2 个答案:

答案 0 :(得分:0)

这对我来说就像预期一样,如果属性更改为true,则选项卡会切换。也许有一个problem with the binding? (或者我误解了这个问题?)

答案 1 :(得分: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>