为DataGrid对象设置ItemsSource后,没有列 - 但为什么?
示例:
class Record
{
string C1 { get; set; }
public Record(string c1)
{
this.C1 = c1;
}
}
private void BuildDataGrid() {
var records = new Record[] {new Record("foo")};
var dataGrid = new DataGrid();
dataGrid.ItemsSource = records;
// dataGrid.Columns.Count delivers 0
}
更新:即使对于类和属性使用public
个访问者,问题仍然存在。
更新2:在指定dataGrid.AutoGenerateColumns = true
之前设置ItemsSource
也无济于事。
令人兴奋的是,当我显示dataGrid
对象时,该列将显示在窗口中!但是列数(如上所示)仍为0。
答案 0 :(得分:6)
DataGrid内部generate columns for all public properties exposed by underlying
object
。
所以你需要在课堂上C1 property public
public string C1 { get; set; }
因列数设置为0而更新。
除非自动生成列,否则列数将为0。您可以通过挂钩事件AutoGeneratedColumns
来检查列计数。列计数只有在UI上呈现后才会更新。
dataGrid.AutoGeneratedColumns += (s,e) =>
{
int count = dataGrid.Columns.Count;
dataGrid.Columns[0].Header = "New Header Name";
};
此处列数将为1.