Изменение цвета строк в сетке данных из itemSource - PullRequest
0 голосов
/ 22 октября 2018

В моей таблице данных есть строки, которые представляют разные цвета.в форме 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;
}

У меня есть метод загрузки, который инициализирует данные в сетку.

    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 голосов
/ 22 октября 2018

Добавьте Brush свойство к вашему ColorModel:

public Brush Brush => GetColor();

Установите ItemsSource из DataGrid в colorList:

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

Ииспользуйте ItemContainerStyle, чтобы связать свойство Background строки со свойством Brush ColorModel:

<DataGrid x:Name="myColorGrid">
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="{Binding Brush}" />
        </Style>
    </DataGrid.ItemContainerStyle>
</DataGrid>
...