Управляющий триггер WPF, примененный к DATETIME сетки данных - PullRequest
0 голосов
/ 13 июля 2010

Я искал цвета строк моей таблицы данных в соответствии со столбцом даты и времени, в который заполняется ObjectDataProvider, мой вопрос: возможно ли это в XAML?Скомбинировал некоторый пример кода того, что я хотел бы, сравнение даты и времени, основанное на одном из них, затем раскрасьте эту строку в зависимости от обстоятельств.

 <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>

Я думал об итерациях по каждой строке и раскраске, но я подумал, что это будет грязно, и сортировка может все испортить.

1 Ответ

2 голосов
/ 14 июля 2010

Стандартный шаблон - это создание 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...