如何从同一个类的方法中访问DisplayMember?

时间:2014-01-14 17:34:54

标签: c# wpfdatagrid

我有一个类数据,其中定义了一个原型ReportName,显示名称略有不同,因此网格列标题更有意义。

现在我正在向这个类实现IDataErrorInfo,以便在保存时向最终用户显示一条错误消息,说“报告名称不能为空”。那么如何在同一个类的私有方法中访问ReportName的display member属性呢?

Class Data
{        
     [ProtoMember(1), DefaultValue(null), DisplayName("Report Name")]
     public string ReportName { get; set; }

     //Check if the reportname was entered
     private void CheckReportName()
     {
     //code to check reportname and generate the errormessage containing the colheader to be sent to grid 
     }
}

2 个答案:

答案 0 :(得分:1)

您可以使用反射:

var displayName = this.GetType()
    .GetProperty("ReportName")
    .GetCustomAttributes(false)
    .OfType<DisplayNameAttribute>()
    .First()
    .DisplayNameValue;

答案 1 :(得分:0)

鉴于Reflection已经需要一个'魔术字符串'来让属性名称查找该值,你可能会考虑这样的事情:

class Data
{        
    [ProtoMember(1), DefaultValue(null), DisplayName(DisplayNames.ReportName)]
    public string ReportName { get; set; }

    //Check if the reportname was entered
    private void CheckReportName()
    {
    //code to check reportname and generate the errormessage containing the colheader to be sent to grid 
    }

    private static class DisplayNames
    {
        public const string ReportName = "Report Name";
    }
}    

这比基于反射的方法执行得更快,并且(更重要的是)它避免使用硬编码属性名来获取属性来查找属性。