从itemSource更改datagrid中行的颜色

时间:2018-10-22 12:03:04

标签: c# wpf data-binding colors

在我的数据网格中,我有代表不同颜色的行。 以RGB格式。

我基本上要做的是将每一行的颜色设置为该项目代表的颜色。

所以我想遍历行并根据它所容纳的项目设置颜色。

我的模型如下:

public class ColorModel : INotifyPropertyChanged
{
    private int _GreenValue;
    private int _RedValue;
    private int _BlueValue;

    public int GreenValue
    {
        get { return _GreenValue; }
        set
        {
            if (_GreenValue != value)
            {
                _GreenValue = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("GreenValue"));
                }
            }
        }
    }


    public int RedValue
    {
        get { return _RedValue; }
        set
        {
            if (_RedValue != value)
            {
                _RedValue = value;
                PropertyChanged(this, new PropertyChangedEventArgs("RedValue"));
            }
        }
    }


    public int BlueValue
    {
        get { return _BlueValue; }
        set
        {
            if (_BlueValue != value)
            {
                _BlueValue = value;
                PropertyChanged(this, new PropertyChangedEventArgs("BlueValue"));
            }
        }
    }

    public SolidColorBrush GetColor()
    {
        Color res = new Color();
        res = Color.FromRgb(Convert.ToByte(RedValue), Convert.ToByte(GreenValue), Convert.ToByte(BlueValue));
        var result = new SolidColorBrush(res);
        return result;
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

我有一个load方法,将数据初始化到网格。

    private void Load()
    {
        var colorList = _Context.ColorMix.ToList();
        foreach (var item in colorList)
        {
            var res = Color.FromRgb(Convert.ToByte(item.RedValue), Convert.ToByte(item.GreenValue), Convert.ToByte(item.BlueValue));
            var result = new SolidColorBrush(res);
            var dr = new DataGridRow();
            dr.Item = item;
            dr.Background = result;
            myColorGrid.Items.Add(dr);
        }
        dataGrid = myColorGrid;
    }

问题是该项目没有显示。只有颜色。 因此它变得像具有不同颜色的条纹。 我还需要显示该项目:P

1 个答案:

答案 0 :(得分:1)

Brush属性添加到您的ColorModel

public Brush Brush => GetColor();

ItemsSource中的DataGrid设置为colorList

private void Load()
{
    myColorGrid.ItemsSource = _Context.ColorMix.ToList();
    dataGrid = myColorGrid;
}

并使用ItemContainerStyle将行的Background属性绑定到Brush的{​​{1}}属性:

ColorModel