DataSet を介してデータベースからデータを取り込む DataGrid があります。ここで、セルの値とその他の要素に基づいて、セルの背景に色を付ける必要があります。
2 日間の大半をインターネットの検索に費やした後、IValueConverter を使用してこれを実行することにしました。私のコードを書いた後、コードは正常に実行されます。私がテストしたところ、1) IValueConverter クラスが呼び出され、2) 実際に Brush Color が返されていることがわかりました。
私の問題は、セルが実行時に適用されたブラシ パレットで色付けされていないことです。
奇妙なことに、各行を選択すると、色が付けられるはずのセルがデフォルトの「選択青」とは異なる色 (この場合は明るい白) で強調表示されるため、何かが機能していることがわかります。したがって、何らかの理由で、セルが変換されて IValueConverter が呼び出されても、レイアウトには表示されません。また、CellStyle を単純な色 (この場合は LimeGreen) に設定し、IValueConverter を完全に無視して、セルが 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;
}