У меня есть DataGrid, который заполняет свои данные из базы данных с помощью DataSet. Теперь мне нужно покрасить фон ячеек на основе их ценности и множества других факторов.Проблема IValueConverter с WPF DataGridCells
Проведя большую часть двух дней, прочесывая интернет, я решил использовать IValueConverter для выполнения этого. После написания кода код выполняется отлично; Я протестировал и увидел, что 1) класс IValueConverter вызывается и 2) он действительно возвращает цвет кисти.
Моя проблема заключается в том, что ячейки не окрашиваются приложенной палитрой кисти во время выполнения.
Как-то я знаю, что что-то работает, потому что, когда я выбираю каждую строку, ячейки, которые должны быть окрашены, подсвечиваются другим цветом (в данном случае ярким белым), чем выбор по умолчанию синий». Таким образом, по какой-либо причине, хотя ячейки преобразуются и вызывают IValueConverter, макет NOT, отображающий его. Я также выполнил еще один тест, в котором я просто установил CellStyle на прямой цвет (в данном случае LimeGreen) и полностью проигнорировал IValueConverter, и ячейки DID APPEAR в Lime-Green. Это заставляет меня думать, что что-то не так где-то между Binding и Convert().
Я абсолютно не понимаю, почему цвет преобразования не отображается, и я исчерпал каждый результат поиска на первых страницах 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;
}
Не видите никаких проблем в этом коде (даже если C# делает это сложнее сказать вообще), применили ли вы пользовательские шаблоны к своим DataGrid и DataGridCells? –
@ H.B. Нет настраиваемых шаблонов. Все, что вы видите здесь, это то, что применяется к DataGrid - никакого дополнительного XAML. –
Ну, когда я беру этот код и просто меняю исходный код и соответствующие привязки, он работает. –