WPF DataGrid
コントロールを実行時に生成する列があります。WPF DataGridフォアグラウンドで項目のプロパティにバインドするプログラムで
public class ExamineExamplesDataGridItem
{
public List<string> PredictiveAttributeValues { get; set; }
public string DecisiveAttributeValue { get; set; }
public string ExaminedAttributeValue { get; set; }
public Brush ExaminedAttributeValueColor
{
// if I set a debug point here, I'll get there, but it makes no sense
get
{
return DecisiveAttributeValue == null || ExaminedAttributeValue == null
? Brushes.Black
: DecisiveAttributeValue.Equals(ExaminedAttributeValue) ? Brushes.Green : Brushes.Red;
}
set { }
}
}
DataGrid
インスタンスのフィールドを結合、すべてが着色以外正常に動作します:
List<ExamineExamplesDataGridItem> items = new List<ExamineExamplesDataGridItem>();
// several columns, works fine
for (int i = 0; i < _attributeTypeSet.PredictiveAttributeTypes.Count; i++)
{
DataGridComboBoxColumn attributeTypeColumn = new DataGridComboBoxColumn()
{
TextBinding = new Binding("PredictiveAttributeValues[" + i + "]")
};
dataGrid.Columns.Add(attributeTypeColumn);
}
// prev last column, works fine
DataGridComboBoxColumn decisiveComboBoxColumn = new DataGridComboBoxColumn()
{
CellStyle =
new Style(typeof (DataGridCell)) {Setters = {new Setter() {Property = ForegroundProperty, Value = Brushes.Blue}}}
};
dataGrid.Columns.Add(decisiveComboBoxColumn);
// last column, which content I want to color
DataGridTextColumn examinedColumn = new DataGridTextColumn()
{
ElementStyle = new Style()
{
TargetType = typeof(TextBlock),
Setters =
{
// this works, but..
// new Setter(TextBlock.ForegroundProperty, Brushes.Red)
// ... I need this one. It calls ExaminedAttributeValueColor property, but displays black color anyway
new Setter(TextBlock.ForegroundProperty, new Binding("ExaminedAttributeValueColor"))
}
}
};
dataGrid.Columns.Add(examinedColumn);
dataGrid.ItemsSource = items;
ItemsSource
その色を取り込む黒いままそのItemsSource
として、私はExamineExampleDataGridItem
のジェネリックリストを設定します。
CellStyle = new Style()
{
TargetType = typeof(DataGridCell),
Setters =
{
new Setter(DataGridCell.ForegroundProperty, new Binding("ExaminedAttributeValueColor"))
}
}
をしかし、それはちょうどElementStyle
のように、動作しません:私はまた、このようCellStyle
の代わりElementStyle
をバインドしようとしました。私は多くのトラブルシューティングを見つけましたが、それらはすべてXAMLコーディングに関するものです。私はC#コードから何をしたいのですか?私はどうすればいいのですか? CellStyle
またはElementStyle
のプロパティ以外のものを使用する必要がありますか?私はDataGridTextColumn
のFontStyle
プロパティを見ましたが、私が知っているように、それはちょうどフォントファミリを定義しています。ここで
MVAMパターンを使用しているので、それがXAMLコーディングで見つかったすべての例があります。 – Monty
私がC#コードでdataGridを定義する理由は、実行時に列を定義する必要があります。私はWPFで新しく、私にとってそれを行うのが最も簡単な方法でした。とにかく私の場合には解決策があるはずですね。 –
何でも可能ですが、それは正しいことを意味しません.... WPF \ XAMLでは、最も簡単な方法は通常、最良の方法ではありません。http://www.wpftutorial.net/datagrid.htmlを見てください。私はあなたのC#コードで、バインディング、スタイル、セッターとUIコントロールへの参照を見ることができます。それはXAMLでもっと簡単に行えます。 XAMLのマスタリングに力を注いだ場合、XAMLはコードビハインドよりもはるかに簡単です。正直なところ、私は5年前に同じ問題に直面した.... – Monty