0

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

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

DataGridRow row = new DataGridRow();

然后可能通过 Items.Add() 或您要添加值的东西(每列一个)。

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

我知道我应该像数据绑定之类的东西,但我是 wpf 的新手,我正在制作一个快速而肮脏的应用程序,我宁愿只使用 forloop 并手动制作行。

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

4

1 回答 1

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;
}

困难的方法是一种算法,它只正确拆分现有的标题字符串(需要考虑帕斯卡大小写、数字和缩写,可能不太容易获得 100% 的准确度)。

于 2012-07-23T23:36:31.383 回答