2014-10-07 2 views
0

나는 그런 다음 사용자 지정 특성 클래스속성 속성 목록을 가져 오는 방법은 무엇입니까?

 [System.AttributeUsage(System.AttributeTargets.Property)] 
     public class Format : Attribute 
     { 
      public string   DisplayName { get; set; } 
      public ColumnType  ColumnType { get; set; } 
      public double   Width  { get; set; } 
      public bool    ReadOnly { get; set; } 

      public Format() 
      { 
       ReadOnly = true; 
      } 
     } 

을 만든 나는

 public class GridTestData 
     { 
      [Format(ColumnType = grdOpt.Column.ColumnType.BoundInteger, DisplayName = "Auto ID", ReadOnly = true)] 
      int AutoID   {get; set;} 

      [Format(ColumnType = grdOpt.Column.ColumnType.BoundString, DisplayName = "String", ReadOnly = true)] 
      string String  {get; set;} 

      [Format(ColumnType = grdOpt.Column.ColumnType.BoundInteger, DisplayName = "Integer", ReadOnly = true)] 
      int? Integer  {get; set;} 

      [Format(ColumnType = grdOpt.Column.ColumnType.BoundDouble, DisplayName = "Double", ReadOnly = true)] 
      double? Double  {get; set;} 

      [Format(ColumnType = grdOpt.Column.ColumnType.BoundBooleanTriState, DisplayName = "Boolean", ReadOnly = true)] 
      bool? Boolean  {get; set;} 

      [Format(ColumnType = grdOpt.Column.ColumnType.BoundDateTime, DisplayName = "Date Time", ReadOnly = true)] 
      DateTime? DateTime {get; set;} 
     } 

가 지금은 매개 변수로 내보기 모델 클래스에 걸릴 것입니다 방법을 만들려면 뷰 모델 클래스 다음이 사용자 지정 특성을 구현

List<Format> MyFormatAttributes = GetFormatAttributes(typeof(GridTestData)) 

답변

1

속성이 공개되지 않으므로 NonPublic 바인딩 플래그로 가져와야합니다. 그런 다음 속성에서 원하는 유형의 모든 속성을 가져올 수 있습니다.

var attrs = typeof(GridTestData) 
    .GetProperties(BindingFlags.NonPublic | BindingFlags.Instance) 
    .Select(o => o.GetCustomAttribute<Format>()); 
0

호출 유형 .GetProperties를 사용하여 typ에 대한 PropertyInfo 목록을 가져올 수 있습니다. e, 각 PropertyInfo getcustomattributes()

0

과 같은 방법 만듭니다

public static IList<Format> GetFormatAttributes<TViewModel>() 
{ 
    return typeof(TViewModel) 
    .GetProperties(BindingFlags.NonPublic | BindingFlags.Instance) 
    .Select(t => t.GetCustomAttribute<Format>()) 
    .Where(a != null) 
    .ToList(); 
} 

을이 방법으로 그것을 사용

var myFormatAttributes = GetFormatAttributes<GridTestData>(); 
관련 문제