У меня есть 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;
}