如何在另一个类中获取DisplayName属性

时间:2014-03-20 18:25:44

标签: c# system.componentmodel

我遇到以下代码的问题:

//This class can't be changed for is part of an EF data context.
public partial class person
{
    public string Name { get; set; }
}

//I have this partial just to access the person DisplayNameAttribute 
[MetadataType(typeof(person_metaData))]
public partial class person
{
}

//And this is the MetaData where i am placing the 
public class person_metaData
{
    [DisplayName("Name")]
    public string Name { get; set; }
}

如何在另一个类中获取DisplayNameAttribute?提前谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的班级AssociatedMetadataTypeTypeDescriptionProvider已正确注册,System.ComponentModel.TypeDescriptor班级将尊重元数据类中的属性。

在程序开头附近添加:

TypeDescriptor.AddProvider(
    new AssociatedMetadataTypeTypeDescriptionProvider(typeof(person)), 
    typeof(person));

然后访问属性:

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(person));
PropertyDescriptor prop = properties["Name"];
string displayName = prop.DisplayName;

或者,您可以直接使用AssociatedMetadataTypeTypeDescriptionProvider课程:

var provider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(person));
ICustomTypeDescriptor typeDescriptor = provider.GetTypeDescriptor(typeof(person), null);
PropertyDescriptorCollection properties = typeDescriptor.GetProperties();
PropertyDescriptor prop = properties["Name"];
string displayName = prop.DisplayName;

NB:您的DisplayName属性目前尚未更改显示名称,因此您不会发现任何差异。更改传递给属性构造函数的值,以查看类型描述符是否正常工作。