DataTrigger where value is NOT null?
This is a bit of a cheat but I just set a default style and then overrode it using a DataTrigger if the value is null...
<Style> <!-- Highlight for Reviewed (Default) --> <Setter Property="Control.Background" Value="PaleGreen" /> <Style.Triggers> <!-- Highlight for Not Reviewed --> <DataTrigger Binding="{Binding Path=REVIEWEDBY}" Value="{x:Null}"> <Setter Property="Control.Background" Value="LightIndianRed" /> </DataTrigger> </Style.Triggers> </Style>
You can use an IValueConverter for this:
<TextBlock> <TextBlock.Resources> <conv:IsNullConverter x:Key="isNullConverter"/> </TextBlock.Resources> <TextBlock.Style> <Style> <Style.Triggers> <DataTrigger Binding="{Binding SomeField, Converter={StaticResource isNullConverter}}" Value="False"> <Setter Property="TextBlock.Text" Value="It's NOT NULL Baby!"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style></TextBlock>
Where IsNullConverter is defined elsewhere (and conv is set to reference its namespace):
public class IsNullConverter : IValueConverter{ public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (value == null); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new InvalidOperationException("IsNullConverter can only be used OneWay."); }}
A more general solution would be to implement an IValueConverter that checks for equality with the ConverterParameter, so you can check against anything, and not just null.
I ran into a similar limitation with DataTriggers, and it would seem that you can only check for equality. The closest thing I've seen that might help you is a technique for doing other types of comparisons other than equality.
This blog post describes how to do comparisons such as LT, GT, etc in a DataTrigger.
This limitation of the DataTrigger can be worked around to some extent by using a Converter to massage the data into a special value you can then compare against, as suggested in Robert Macnee's answer.