为什么不';t我的DataTrigger更新TabControl的SelectedIndex属性

本文关键字:TabControl 更新 SelectedIndex 属性 DataTrigger 我的 为什么不 | 更新日期: 2023-09-27 18:20:43

我有一个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>

如果IsRunning属性更改为True,则TabControl应该只切换到第二个选项卡,但现在的问题是,一旦IsRunning属性更改,TabControl就不会更新自己以显示第二个TabItem

有没有办法通过XAML实现这一点,或者我必须在我的视图模型中实现一个SelectedIndex属性,该属性直接绑定到TabControlSelectedIndex

为什么不';t我的DataTrigger更新TabControl的SelectedIndex属性

这对我来说正如预期的那样有效,如果属性更改为true,则切换选项卡。也许装订有问题?(或者我误解了这个问题?)

这是一个老话题,但谁知道其他人可能会像我一样偶然发现这个问题,寻找答案。

解决方案:只需在TabControl样式中添加一个setter,即可将SelectedIndex设置为初始值。例如,Setter属性="SelectedIndex"值="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>