将 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 
 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);
}
我有一个 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 
 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);
}