一行是一个对象,值是所述对象的属性。您不应该自己创建容器(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% 的准确度)。