不是值的时候可以设置数据触发吗?

Is it possible to set a data trigger when it is not a value?

我有一个复选框,当值是除 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 是一个枚举值。

您可以使用 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>

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

因为当它应该可见时您只有一个值,您可以简单地反转您的条件。默认情况下将 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>