ignored when using a DataGrid with AutoGenerateColumns ="True"-6ren"> ignored when using a DataGrid with AutoGenerateColumns ="True"-我正在使用 WPF DataGrid 绑定(bind)到自定义类的集合。在网格 XAML 中使用 AutoGenerateColumns="True",可以很好地创建和填充网格,但标题是属性名称,正如-6ren">
gpt4 book ai didi

.net - 为什么 DataAnnotations ignored when using a DataGrid with AutoGenerateColumns ="True"

转载 作者:行者123 更新时间:2023-12-04 07:36:55 25 4
gpt4 key购买 nike

我正在使用 WPF DataGrid 绑定(bind)到自定义类的集合。在网格 XAML 中使用 AutoGenerateColumns="True",可以很好地创建和填充网格,但标题是属性名称,正如人们所期望的那样。

我尝试指定

<Display(Name:="My Name")> 

来自 System.ComponentModel.DataAnnotations 命名空间,这没有任何影响。我也试过
<DisplayName("My Name")> 

来自 System.ComponentModel 命名空间,但标题仍然不受影响。

是否无法使用 AutoGenerateColumns 选项指定列标题?

最佳答案

使用@Marc 的建议是解决方案的开始,但单独使用,AutoGenerated 列仍将属性名称作为标题。

要获取 DisplayName,您需要添加一个例程(在后面的代码中)来处理 GridAutoGeneratingColumn 事件:

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
...

OnGeneratingColumn 变为:
        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(...) 而不是数字参数... 太有趣了!

关于.net - 为什么 DataAnnotations <Display(Name : ="My Name")> ignored when using a DataGrid with AutoGenerateColumns ="True",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5230402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com