我在wpf应用程序中创建了一个datagrid(拖放)。然后,我通过属性窗口手动添加列。
我现在想通过后面的代码向这个数据网格添加行。我本以为你会做一个
DataGridRow row = new DataGridRow();
然后通过Items.Add()或其他你可以添加你的值(每列一个)。
我没有看到这个,所以我想知道我该怎么做。
我知道我应该像数据绑定和东西但是我刚接触到wpf并且我正在制作一个快速而又脏的应用程序而且我只需要使用forloop并手动创建行。
如果我感受到这种欲望,我宁愿回来重构这个区域。我真的只想要我正在制作和运行的东西,所以我可以使用它。
答案 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%的准确性)。