如何通过DataBinding / Triggers有选择地设置TabItem的“可见性”

时间:2008-11-19 15:41:17

标签: wpf data-binding eventtrigger

如果属性(BlahType)设置为1并且显示为设置为0,则我应该隐藏一个标签页。这是我想要做的事情:

<TabItem Header="Blah">
    <TabItem.Triggers>
        <DataTrigger Binding="{Binding BlahType}" Value="0">
            <Setter Property="TabItem.Visibility" Value="Hidden" />
        </DataTrigger>
    </TabItem.Triggers>
</TabItem>

问题是,我收到此错误:

"Triggers collection members must be of type EventTrigger"

如果你谷歌那个错误,你会看到Dr. WPF explains the error。有没有一种干净的方式来做我想在这里实现的目标?

2 个答案:

答案 0 :(得分:13)

我相信控件的Triggers集合目前仅支持EventTriggers。如果您想使用DataTrigger,只需将其放在样式中,例如:

<TabItem Header="Blah">
    <TabItem.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding BlahType}" Value="0">
                    <Setter Property="TabItem.Visibility" Value="Hidden" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TabItem.Style>
</TabItem>

答案 1 :(得分:0)

嗯,你不能使用触发器(除非你在DataTemplate,ControlTemplate或Style中)。

您可以使用绑定来执行此操作,您需要编写一个自定义ValueConverter,它将在0/1之间转换为Visible / Hidden,然后您可以将Visibility属性绑定到BlhaType属性。

或者你可以在代码中设置可见性并放弃基于XAML的方法(我会做的)。