我正在使用 WPF DataGrid 绑定到自定义类的集合。在网格 XAML 中使用 AutoGenerateColumns="True",可以很好地创建和填充网格,但正如人们所期望的那样,标题是属性名称。
我尝试指定
<Display(Name:="My Name")>
来自 System.ComponentModel.DataAnnotations 命名空间,这没有任何效果。我也尝试过
<DisplayName("My Name")>
来自 System.ComponentModel 命名空间,但标题仍然不受影响。
是否无法使用 AutoGenerateColumns 选项指定列标题?
使用@Marc的建议是解决方案的开始,但就其本身而言,自动生成的列仍然将属性名称作为标题。
要获取 DisplayName,您需要添加一个例程(在后面的代码中)来处理 Grid AutoGenerateColumn 事件:
Private Sub OnGeneratingColumn(sender As Object, e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles Grid.AutoGeneratingColumn
Dim pd As System.ComponentModel.PropertyDescriptor = e.PropertyDescriptor
e.Column.Header = pd.DisplayName
End Sub
另一个更好的解决方案是使用 ComponentModel.DataAnnotations 命名空间并指定 ShortName:
Public Class modelQ016
<Display(shortname:="DB Name")>
Public Property DBNAME As String
...
OnGenerateColumn 变为:
Dim pd As System.ComponentModel.PropertyDescriptor = e.PropertyDescriptor
Dim DisplayAttrib As System.ComponentModel.DataAnnotations.DisplayAttribute =
pd.Attributes(GetType(ComponentModel.DataAnnotations.DisplayAttribute))
If Not DisplayAttrib Is Nothing Then
e.Column.Header = DisplayAttrib.ShortName
End If
请注意,属性数组中属性的顺序会发生变化,因此您必须使用 GetType(...) 而不是数字参数...真有趣!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)