设置ItemsSource后,为什么DataGrid对象中没有添加列?

时间:2013-12-19 12:23:13

标签: c# wpf datagrid

为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。

1 个答案:

答案 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.