以编程方式添加DataGrid行?

时间:2012-07-23 23:30:46

标签: .net wpf datagrid

我在wpf应用程序中创建了一个datagrid(拖放)。然后,我通过属性窗口手动添加列。

我现在想通过后面的代码向这个数据网格添加行。我本以为你会做一个

DataGridRow row = new DataGridRow();

然后通过Items.Add()或其他你可以添加你的值(每列一个)。

我没有看到这个,所以我想知道我该怎么做。

我知道我应该像数据绑定和东西但是我刚接触到wpf并且我正在制作一个快速而又脏的应用程序而且我只需要使用forloop并手动创建行。

如果我感受到这种欲望,我宁愿回来重构这个区域。我真的只想要我正在制作和运行的东西,所以我可以使用它。

1 个答案:

答案 0 :(得分:1)

一行是一个对象,值是所述对象的属性。您不应该自己创建容器(DataGridRow),DataGrid可以为您完成。只需将数据对象直接添加到Items(或集合设置为ItemsSource,它应该实现INotifyCollectionChanged(例如ObservableCollection<T>))。列应绑定数据对象上的属性,默认情况下,它们是从数据中自动创建的。


回复评论:使用DisplayNameAttribute,您可以轻松地从标题中获取空格,但您需要将属性添加到所有违规属性中:

[DisplayName("Full Name")]
public string FullName { get; }

然后订阅DataGrid.AutoGeneratingColumn( - 哦,这个问题在文档中有一个hacky解决方案 - ):

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    var descriptor = (MemberDescriptor)e.PropertyDescriptor;
    //Takes the value from the attribute if exists & non-default-value, else property name.
    e.Column.Header = descriptor.DisplayName;
}

困难的方法是一种算法,它只是正确地分割现有的标题字符串(需要考虑pascal大小写,数字和缩写,可能不那么容易获得100%的准确性)。