WPF DataTrigger/Setter со сравнением DateTime
Мне просто интересно, можно ли провести сравнение DATETIME с WPF, в идеале я бы хотел покрасить свою сетку данных в зависимости от ее актуальности для текущей даты. Красный для прошлых файлов, зеленый для будущего. Спасибо за любую помощь!
<dg:DataGrid Name="files_datagrid" DataContext="{Binding Source={StaticResource filelist_provider}}"
ItemsSource="{Binding}" CanUserAddRows="False" AutoGenerateColumns="False" Grid.Row="1">
<Style TargetType="{x:Type dg:DataGridRow}"> <Style.Triggers>
<DataTrigger Binding="{Binding Path=[filedate]}" Value=">TODAY">
<Setter Property="Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
1 ответ
Решение
Я думаю, что вам лучше использовать конвертер значений.
Что-то вроде этого:
[ValueConversion(typeof(DateTime), typeof(Brush))]
public class DateTimeToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var dateTime = (DateTime)value;
if (dateTime.Date < DateTime.Now)
return Brushes.Red;
if (dateTime.Date > DateTime.Now)
return Brushes.Green;
return Brushes.Black;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Вы можете переместить цвета в параметры, чтобы сделать их более общими, если хотите.
Затем примените вот так:
<Style TargetType="{x:Type dg:DataGridRow}">
<Setter Property="Background"
Value="{Binding Path=fileDate,
Converter={StaticResource dateTimeToBrushConverter}}" />
</Style>
Где dateTimeToBrushConverter создается в ваших ресурсах.