WPF控制触发器应用于DATETIME的datagrid

问题描述:

我正在寻找颜色的DataGrid的行按照由ObjectDataProvider填充到的日期时间列,我的问题是这是否可能在XAML内?把我想要的一些示例代码封装起来,根据其中的一个进行日期时间比较,然后根据适用情况对该行进行着色。WPF控制触发器应用于DATETIME的datagrid

<Style.Triggers> 
    <Trigger Property="DateTimeColumn" Value="dateisbeforetoday" > 
     <Setter Property="Background" Value="Yellow" /> 
    </Trigger> 
    <Trigger Property="DateTimeColumn" Value="dateaftertoday" > 
     <Setter Property="Background" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 

我在想的每一行迭代我的方式和着色它的,但我认为这将是凌乱,和排序可能会搞砸。

标准模式是创建一个IValueConverter,根据比较将对象转换为True或False。

在代码:

public class IsBeforeTodayConverter 
    : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is DateTime) 
     { 
      return ((DateTime)value).Date < DateTime.Now.Date; 
     } 
     else 
     { 
      return DependencyProperty.UnsetValue; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return Binding.DoNothing; 
    } 
} 

在XAML:

<Style.Resources> 
    <local:IsBeforeTodayConverter x:Key="IsBeforeTodayConverter" /> 
</Style.Resources> 
<Style.Triggers> 
    <DataTrigger 
     Binding="{Binding DateTimeColumn, 
      Converter={StaticResource IsBeforeTodayConverter}}" 
     Value="True"> 
     <Setter Property="Background" Value="Yellow"/> 
    </DataTrigger> 
</Style.Triggers> 

你可以为IsAfterToday创建一个类似的转换器,或利用ConverterParameter概括这个类。