私は、DataSetを介してデータベースからデータを取り込むDataGridを持っています。さて、私がしなければならないことは、細胞の価値と多くの他の要因に基づいて、細胞の背景を色づけることです。IValueConverter WPF DataGridCellの問題
2日間でインターネットを精査した後、私はIValueConverterを使ってこれを実行することに決めました。私のコードを書いた後、コードは正常に実行されます。私はテストして、1)IValueConverterクラスが呼び出されていることと、2)実際にブラシカラーを返すことを見てきました。
私の問題は、実行時にセルが適用されたブラシパレットで着色されていないことです。
奇妙なことに、何かが働いています。なぜなら、各行を選択すると、色付けされるはずのセルが、デフォルトの「選択」よりも異なる色(この場合は明るい白色)で強調表示されるからです。青"。したがって、何らかの理由で、セルが変換されてIValueConverterを呼び出すにもかかわらず、レイアウトはNOTです。また、CellStyleをストレートカラー(この場合はLimeGreen)に設定し、IValueConverterを完全に無視し、Lime-GreenのDID APPEARセルを無視する別のテストを実行しました。これは私に、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;
}
このコードでは問題はありません(一般的に言うと難しくなりますが)、カスタムテンプレートをDataGridやDataGridCellに適用しましたか? –
@ H.B。カスタムテンプレートはありません。ここに表示されているものは、DataGridに適用されているものです。追加のXAMLはありません。 –
さて、私はそのコードを取って、アイテムのソースとそれぞれのバインディングを変更するだけです。 –