Trigger when condition is not equal to

styles, wpf

Solution

You need an `IValueConverter` and some extra markup for this:

    <Style>
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <!--<Condition 1 here.../>-->
                    <!--<Condition 2 here.../>-->
                    <Condition>
                        <Condition.Binding>
                            <Binding Path="id" Converter="{StaticResource ValueToEqualsParameterConverter}">
                                <Binding.ConverterParameter>
                                    <System:Int32>3</System:Int32>
                                </Binding.ConverterParameter>
                            </Binding>
                        </Condition.Binding>
                        <Condition.Value>
                            <System:Boolean>False</System:Boolean>
                        </Condition.Value>
                    </Condition>
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
                <Setter Property="Foreground" Value="Black" />
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>

And the converter:

public class ValueToEqualsParameterConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
        return value == parameter; 
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
        return null; 
    }
}

Problem

I need a `Style` under WPF that sets several properties when multiple conditions are fullfilled. However, one of my conditions is of type `Not Equal To`. How should I change the below `Style` so that the condition would become `Not Equal To`? Can it be even achieved without `IValueConverter`? ``` <Style> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <!--<Condition 1 here.../>--> <!--<Condition 2 here.../>--> <Condition Binding="{Binding Path=id}" Value="3"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="Red"/> <Setter Property="Foreground" Value="Black"/> </MultiDataTrigger> </Style.Triggers> </Style> ``` I would need the below but this of course don't work since Triggers only support `Equal` operator. ``` <Style> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <!--<Condition 1 here.../>--> <!--<Condition 2 here.../>--> <Condition Binding="{Binding Path=id}" Value<>"3"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="Red"/> <Setter Property="Foreground" Value="Black"/> </MultiDataTrigger> </Style.Triggers> </Style> ```

Original source