C# 使用数据绑定彩色数据网格对数据进行排序

C# 使用数据绑定彩色数据网格对数据进行排序,c#,wpf,sorting,data-binding,datagrid,C#,Wpf,Sorting,Data Binding,Datagrid,我最近尝试使用以下代码(XAML)对datagrid中的某些行着色: 方法: [ValueConversion(typeof(DateTime), typeof(bool))] public class IsDateExpiredConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {

我最近尝试使用以下代码(XAML)对
datagrid
中的某些行着色:


方法:

[ValueConversion(typeof(DateTime), typeof(bool))]
public class IsDateExpiredConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (DBNull.Value == value)
            return false;

        DateTime date = (DateTime)value;
        DateTime curDate = DateTime.Now;


        if (date < curDate)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
[ValueConversion(typeof(DateTime),typeof(bool))]
公共类IsDateExpiredConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
if(DBNull.Value==Value)
返回false;
DateTime日期=(DateTime)值;
DateTime curDate=DateTime.Now;
如果(日期<当前日期)
{
返回true;
}
其他的
{
返回false;
}
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
因此,它只是将DataGridRow着色,其中“Notenmeldung”小于当前日期。这个很好用

问题 当我点击标题对网格进行排序时,有时绿色的行消失了。这取决于我正在排序的列和排序的方向。例如,我在两个方向上对一列进行排序,一切都很好。当我在一个特定方向上排序时(在另一个方向上它再次变为绿色),另一个方向只显示颜色(行仍然在那里)。然后我们还有一个例子,没有什么东西会变绿了。
DataGrid
的源是一个
DataBaseTable
,我看不到数据类型和单元格内容之间有任何规律性


我非常感谢每一个小提示。

解决方案:
不要使用
AlternatingRowBackground
,这会覆盖更改后的颜色。

尝试将您的资源设置为
,并从列表中删除
x:key
style@lokuskingVS说,DataGrid.Resources不存在或不可访问。有什么我能监督的吗?我想你有一个数据网格?将您的资源放在那里,而不是
。如果你需要一个提示,我可以给你一个答案,告诉你我想要什么mean@lokusking是的,那真的很有帮助。:)既然你说我的代码没有变化,你会使用某种特殊的绑定吗?也许还可以显示数据网格的XAML
[ValueConversion(typeof(DateTime), typeof(bool))]
public class IsDateExpiredConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (DBNull.Value == value)
            return false;

        DateTime date = (DateTime)value;
        DateTime curDate = DateTime.Now;


        if (date < curDate)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}