gpt4 book ai didi

c# - 如何覆盖自动创建数据网格列标题?

转载 作者:行者123 更新时间:2023-11-30 22:58:42 25 4
gpt4 key购买 nike

由于 WPF 会根据保存数据的类自动创建列标题,我想问一下是否有可能重写这个过程?

比如有这个类

public class Report
{
public string Value { get; set; }
public int Title { get; set; }
}

我将收到 2 列 - |值(value) |标题 |

正如我现在看到的那样,WPF 通过获取属性名称并“粘贴”它所获取内容的纯输出来创建这些列标题

是这样的吗?

nameof(property);

我想要实现的目标是为像这样的属性创建一个自定义属性

[Header("Price in €")]
public string Value { get; set}

并让 WPF 基于该属性创建列标题,所以我的列将是这样的 -

|价格 € |标题 |

我的问题是如何覆盖它?

最佳答案

您可以为此创建一个简单的行为

我将在此示例中使用 ComponentModel.DescriptionAttribute,但您当然可以使用任何自定义属性。

using System.ComponentModel;
using System.Windows.Interactivity;

class ExtendendHeadersBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
AssociatedObject.AutoGeneratingColumn += AssociatedObject_AutoGeneratingColumn;
}

protected override void OnDetaching()
{
AssociatedObject.AutoGeneratingColumn -= AssociatedObject_AutoGeneratingColumn;
}

private void AssociatedObject_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyDescriptor is PropertyDescriptor desc)
{
string header = desc.Attributes.OfType<DescriptionAttribute>()
.FirstOrDefault()?.Description;

if (!string.IsNullOrEmpty(header))
{
e.Column.Header = header;
}
}
}
}

用法:

<DataGrid>
<i:Interaction.Behaviors>
<b:ExtendendHeadersBehavior/>
</i:Interaction.Behaviors>
</DataGrid>

命名空间是:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:b="clr-namespace:YourAppNamespace"

关于c# - 如何覆盖自动创建数据网格列标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52839185/

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