Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get DataTemplate.DataTrigger to check for greater than or less than?

The following DataTemplate.DataTrigger makes the age display red if it is equal to 30.

How do I make the age display red if it is greater than 30?

<DataTemplate DataType="{x:Type local:Customer}">     <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}">         <Grid.ColumnDefinitions>             <ColumnDefinition Width="100"/>             <ColumnDefinition Width="150"/>         </Grid.ColumnDefinitions>         <Grid.RowDefinitions>             <RowDefinition/>             <RowDefinition/>             <RowDefinition/>         </Grid.RowDefinitions>         <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" Margin="5"/>         <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}" Margin="5"/>         <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" Margin="5"/>         <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding LastName}" Margin="5"/>         <TextBlock Grid.Column="0" Grid.Row="2" Text="Age" Margin="5"/>         <TextBlock x:Name="Age" Grid.Column="1" Grid.Row="2" Text="{Binding Age}" Margin="5"/>     </Grid>      <DataTemplate.Triggers>         <DataTrigger Binding="{Binding Path=Age}">             <DataTrigger.Value>30</DataTrigger.Value>             <Setter TargetName="Age" Property="Foreground" Value="Red"/>          </DataTrigger>     </DataTemplate.Triggers>  </DataTemplate> 
like image 673
Edward Tanguay Avatar asked Apr 27 '09 15:04

Edward Tanguay


1 Answers

You could create an IValueConverter, which converts an integer to a boolean based on the CutOff. Then use DataTrigger.Value of True (or False, depending on what you are returning).

WPF DataTriggers are strictly equality comparers if I remember correctly.

So something similar to:

public class CutoffConverter : IValueConverter {     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {         return ((int)value) > Cutoff;     }      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {         throw new NotImplementedException();     }      public int Cutoff { get; set; } } 

Then use the following XAML.

<Window.Resources>     <myNamespace:CutoffConverter x:Key="AgeConverter" Cutoff="30" /> </Window.Resources>  <DataTemplate.Triggers>     <DataTrigger Binding="{Binding Path=Age,                                    Converter={StaticResource AgeConverter}}">         <DataTrigger.Value>true</DataTrigger.Value>         <Setter TargetName="Age" Property="Foreground" Value="Red"/>      </DataTrigger> </DataTemplate.Triggers> 
like image 99
Mikko Rantanen Avatar answered Sep 17 '22 21:09

Mikko Rantanen