这是我的类定义。
public class Customer
{
[Display(Name="Customer ID")]
public int ID { get; set; }
[Display(Name="Customer Name")]
public string CusName { get; set; }
}
这是我的 XAML 代码
<DataGrid Name="DataGrid" />
这就是数据绑定
public Test()
{
InitializeComponent();
List<Customer> cus = new List<Customer>();
cus.Add(new Customer() { ID = 1, CusName = "Jackson" });
cus.Add(new Customer() { ID = 2, CusName = "Micheal" });
cus.Add(new Customer() { ID = 3, CusName = "Jackson" });
DataGrid.ItemsSource = cus;
}
这是结果:
DataGrid标题列显示ID,CusTomer,它们是Customers字段名称。
如何使DataGrid标题列显示客户ID、客户名称而不是ID、CusNumber?它们位于 [Display] 属性中
正如您所看到的,DataGrid 并不真正关心您的属性是否被修饰。您可以禁用列的自动生成并手动定义它们,或者利用 AutoGenerateColumn 事件
<DataGrid x:Name="grid" AutoGeneratingColumn="grid_AutoGeneratingColumn"/>
private void grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
switch (e.PropertyName)
{
case "ID":
e.Column.Header = "Customer ID";
break;
case "CusName":
e.Column.Header = "Customer Name";
break;
default:
break;
}
}
您还可以通过定义附加行为来自动化此解决方案:
public static class CustomColumnHeadersProperty
{
public static DependencyProperty ItemTypeProperty = DependencyProperty.RegisterAttached(
"ItemType",
typeof(Type),
typeof(CustomColumnHeadersProperty),
new PropertyMetadata(OnItemTypeChanged));
public static void SetItemType(DependencyObject obj, Type value)
{
obj.SetValue(ItemTypeProperty, value);
}
public static Type GetItemType(DependencyObject obj)
{
return (Type)obj.GetValue(ItemTypeProperty);
}
private static void OnItemTypeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
var dataGrid = sender as DataGrid;
if (args.NewValue != null)
dataGrid.AutoGeneratingColumn += dataGrid_AutoGeneratingColumn;
else
dataGrid.AutoGeneratingColumn -= dataGrid_AutoGeneratingColumn;
}
static void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var type = GetItemType(sender as DataGrid);
var displayAttribute = type.GetProperty(e.PropertyName).GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault() as DisplayAttribute;
if (displayAttribute != null)
e.Column.Header = displayAttribute.Name;
}
}
<DataGrid x:Name="grid" local:CustomColumnHeadersProperty.ItemType="{x:Type local:MyClass}"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)