如何在Datagrid中为第一行设置颜色

我在wpf(mvvm)项目上有一个datagrid。 datagrid排序显示作为第一行添加到集合的最后一项。 我想为第一行着色(为了突出显示添加到集合中的新项目)我已经看到了一些关于这种方式的类似问题,但它们都没有真正与我正在寻找的相关。 我试图使用IValueConverter,但它似乎不适合我,因为我需要获得第一行的唯一标识符并更改所有其余行,以便将其归类为“第一行”。

我对集合中项目的对象模型如下所示:

public class Messages { public string Date {get; set;} public string Sender{get; set;} public string Content{get; set;} } 

*编辑忘记添加转换器代码…当然这会将所有行着色为红色,因为我不知道如何在集合更改时影响其他行。

 class DateToColorConverter : IValueConverter { object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (Convert.ToDateTime(value) >= DateTime.Now.AddMinutes(-1)) { return "Red"; } else return "Yellow"; } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 

您可以将RelativeSourceMode设置为PreviousData一起使用,以识别dataGrid行是否为第一行。 对于第一行,PreviousData将返回null。

在ItemContainerStyle中的DataGridRow上应用DataTrigger:

      

如果您的数据类使用某种Id字段,则可以执行简单的解决方案。 假设新添加的对象的Id-1 ,或者00000000-0000-0000-0000-000000000000 (要在成功保存时更新/设置)。 在这种情况下,您可以使用简单的DataTrigger来更改这些项的Background

         

在您的模型中添加一个bool,它将指示添加的最后一个元素:

  public class Messages { public string Date {get; set;} public string Sender{get; set;} public string Content{get; set;} public string IsNew {get; set;} } 

并根据该属性设置DataGridRow的样式:

    

在上面的代码中,蓝色将是默认样式,红色是新行