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概括这个类。