Проблема IValueConverter с WPF DataGridCells - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть DataGrid, который заполняет свои данные из базы данных через DataSet.Теперь мне нужно покрасить фон ячеек, основываясь на их значении и множестве других факторов.

Потратив большую часть двух дней на изучение Интернета, я решил использовать для этого IValueConverter.После написания моего кода код выполняется нормально;Я проверил и увидел, что 1) вызывается класс IValueConverter и 2) он действительно возвращает цвет кисти.

Моя проблема в том, что ячейки не окрашиваются с помощью примененной палитры кистей во время выполнения.

Как ни странно, я знаю, что что-то работает, потому что, когда я выбираю каждую строку, ячейки, которые должны быть окрашены, подсвечиваются другим цветом (в данном случае, ярко-белым), чем по умолчанию "выбор синий".Поэтому, по какой-то причине, хотя ячейки конвертируют И вызывают IValueConverter, макет НЕ отображает его.Я также выполнил еще один тест, в котором я просто установил для CellStyle прямой цвет (в данном случае LimeGreen) и полностью проигнорировал IValueConverter, а ячейки DID APPEAR появились в Lime-Green.Это приводит меня к мысли, что что-то не так между связыванием и преобразованием ().

Я совершенно сбит с толку, почему цвет конверсии не отображается, и я исчерпал все результаты поиска на первых нескольких страницах Google, так что я надеюсь, что кто-то здесь сможет взглянуть на мой коди укажите мне точно, почему DataGrid действует так.

DataTable dt = new DataTable();
        dt = ((DataSet)ItemSource).Tables[0];
        int counter = 0;

        foreach (DataColumn dc in dt.Columns)
        {
            switch(dc.ColumnName)
            { 
             (....)
             case "SEAPCT":
                    DataGridTextColumn col2 = new DataGridTextColumn();

                    col2.Header = (((DataSet)ItemSource).Tables[0].Columns[counter].ToString()).Replace("PCT", "%");
                    col2.Binding = new Binding(dc.ColumnName);

                    Style style = new Style(typeof(DataGridCell));

                    Setter setter = new Setter();
                    setter.Property = DataGridCell.BackgroundProperty;

                    Binding b = new Binding(dc.ColumnName);
                    b.Converter = new PercentCellConverter();

                    setter.Value = b;
                    style.Setters.Add(setter);

                    col2.CellStyle = style;


                    DashboardGrid.Columns.Insert(counter, col2);
                    counter++;
                    break;
            }
        }

        DashboardGrid.ItemsSource = dt.DefaultView;
  }

И, для справки, мой класс IValueConverter:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
       string n = value.ToString();
        System.Diagnostics.Debug.WriteLine(n);

       if (double.Parse(n) > 0)
            return Brushes.LimeGreen;
        else if (double.Parse(n) == 0)
            return Brushes.Yellow;
        else
            return Brushes.Red;

    }

1 Ответ

1 голос
/ 27 февраля 2012

Я понял это: в моем классе IValueConverter я использовал System.Drawing.Brushes вместо System.Windows.Media.Brushes.Поэтому, пока мой конвертер WAS работал правильно, цвета не отображались просто потому, что я возвращал неправильный тип цветовой группы.

...