当它不是值时,是否可以设置数据触发器?

时间:2015-01-20 18:58:58

标签: c# wpf datatrigger

我有一个复选框,当值为除1之外的任何值时,我想要折叠。

所以我想做点什么:

<CheckBox.Style>
    <Style TargetType="CheckBox">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=ucPrincipal, Path=DataContext.MyProperyViewMode}" Value<>"MyValue">
                <Setter Property="Visibility" Value="Collapsed"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</CheckBox.Style>

当然,数据触发器中的值不能使用<>比较器,但这就是想法。 MyPropertyViewModel是枚举值。

2 个答案:

答案 0 :(得分:2)

您可以使用IValueConverter。假设您的实现名为YourConverter

这是Convert方法:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
        YourEnum enumValue = (YourEnum)value;
        return enumValue == YourEnum.WrongValue;
}

所以你的DataTrigger将是:

<CheckBox.Style>
    <Style TargetType="CheckBox">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=ucPrincipal, Path=DataContext.MyProperyViewMode, Converter={StaticResource YourConverter}}" Value="True">
                <Setter Property="Visibility" Value="Collapsed"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</CheckBox.Style>

当然,您必须将转换器声明为资源。

答案 1 :(得分:2)

由于只有一个值可见,您可以简单地反转您的情况。默认情况下,将Visibility设置为Collapsed,并且只有当该值触发时才Visible

<CheckBox.Style>
    <Style TargetType="CheckBox">
        <Setter Property="Visibility" Value="Collapsed"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=ucPrincipal, Path=DataContext.MyProperyViewMode}" Value="MyValue">
                <Setter Property="Visibility" Value="Visible"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</CheckBox.Style>