将 DataTemplate 列背景颜色绑定到 IvalueConverter

Binding DataTemplate Column BackGround Color to IvalueConverter

我有一个 WPF 数据网格和一个名为 "Requested Date Out Source." 的数据模板列 应用程序应查看单元格中的日期并根据日期是今天、过去还是将来更改颜色。

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

结果是该列始终为红色:

跟踪代码表明 Convert Object 值始终为 NULL,这就是显示始终为红色的原因。

这意味着绑定存在一些问题。我尝试了多种方法都没有成功。

对此有什么想法吗? 提前致谢, 克里

您需要将值传递给转换器,否则当前数据上下文将用作可能不是 DateTime:

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

按照@Xiaoy312 的建议将 Foreground 属性 绑定到 DateOutSource 属性:

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);
}