Привязка столбца DataTemplate BackGround Color к IvalueConverter - PullRequest
1 голос
/ 29 января 2020

У меня есть таблица данных WPF, и у меня есть столбец таблицы данных, который называется «Запрошенный источник даты». Приложение должно просмотреть дату в ячейке и изменить цвет в зависимости от того, сегодня это, прошлое или будущее.

У меня есть Ivalueconverter:

public class FBrushConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string input = value as string;
            {
                if (input == "Select a date")
                {
                    return new SolidColorBrush(Colors.Black);
                }
                else
                {
                    DateTime dt = System.Convert.ToDateTime(input);
                    switch (true)
                    {
                        case true when (dt == DateTime.Today):
                            return new SolidColorBrush(Colors.Yellow);
                        case true when (dt < DateTime.Today):
                            return new SolidColorBrush(Colors.Red);
                        case true when (dt > DateTime.Today):
                            return new SolidColorBrush(Colors.Blue);
                        default:
                            //return Brushes.Black;
                            return new SolidColorBrush(Colors.Black);
                    }
                }
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }

У меня есть XAML:

<DataGridTemplateColumn x:Name="DateoutSource" Header="Requested &#x0a; Date Out Source" Width="125" SortMemberPath="DateOutSource" SortDirection="Ascending" >
                       <DataGridTemplateColumn.CellTemplate>                       
                            <DataTemplate>
                            <DatePicker x:Name="BtnDateOutSource" SelectedDate="{Binding DateOutSource}" SelectedDateChanged="BtnDateOutSource_SelectedDateChanged" Foreground="{Binding Converter={StaticResource FBrushConverter}}">                               
                            </DatePicker>
                            </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

В результате столбец всегда красного цвета:

enter image description here

Трассировка кода указывает, что значение Преобразовать объект всегда NULL, поэтому дисплей всегда красный.

Это подразумевает некоторые проблемы с привязкой. Я попробовал множество подходов без удачи.

Есть идеи на этот счет? Заранее спасибо, Керри

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Свяжите свойство Foreground со свойством DateOutSource, как предложено @ Xiaoy312:

Foreground="{Binding DateOutSource, Converter={StaticResource FBrushConverter}}"

Затем вам также нужно изменить ваш конвертер, чтобы привести значение к DateTime?, которое я предполагаю фактический тип DateOutSource:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    DateTime? dt = (DateTime?)value;
    if (!dt.HasValue)
        return new SolidColorBrush(Colors.Black);

    DateTime date = dt.Value.Date;
    if (date == DateTime.Today)
        return new SolidColorBrush(Colors.Yellow);
    else if (date < DateTime.Today)
        return new SolidColorBrush(Colors.Red);
    else if (date > DateTime.Today)
        return new SolidColorBrush(Colors.Blue);

    return new SolidColorBrush(Colors.Black);
}
2 голосов
/ 29 января 2020

Вам необходимо передать значение в преобразователь, иначе текущий текст данных будет использоваться как значение, которое, скорее всего, не DateTime:

Foreground="{Binding DateOutSource, Converter={StaticResource FBrushConverter}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...