使用数据绑定着色数据网格

时间:2017-03-13 13:06:11

标签: c# wpf sorting data-binding datagrid

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

<Window.Resources>
    <local:IsDateExpiredConverter x:Key="IsDateExpiredConverter" />
    <Style x:Key="DataGridRowStyle" TargetType="{x:Type DataGridRow}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Notenmeldung, Converter={StaticResource IsDateExpiredConverter}}" Value="True">
                <Setter Property="Background" Value="#d2efbd"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

方法:

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

它是做什么的,它只是将DataGridRow着色,其中“ Notenmeldung ”是&lt;比当前日期。这很好用。

问题

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

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

1 个答案:

答案 0 :(得分:1)

解决方案:

不要使用AlternatingRowBackground,这会覆盖更改后的颜色。