2009-05-11 4 views
5

속성 위에있는 모든 맞춤 속성을 수집하려고합니다. 이 속성에 할당 된 동일한 유형의 하나 개 이상의 속성이 있지만, 그것들을 수집 할 때, 결과 수집에만 특정 유형의 첫 번째 특성이 포함되어AllowMultiple이 속성 속성과 함께 작동하지 않습니까?

속성 클래스

[AttributeUsage(System.AttributeTargets.Property, 
       AllowMultiple = true)] 

public class ConditionAttribute : Attribute{...} 

사용법 :

를 이제
[ConditionAttribute("Test1")] 
[ConditionAttribute("Test2")] 
[ConditionAttribute("Test3")] 
public Color BackColor{get; set;} 

클래스 소품 "에 BackColor"를 포함하는 개체 '값'의 모든 소품 통해 반복 :

foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value)) 
{ 
    foreach (Attribute attribute in property.Attributes) 
    { ... } 
    .... 
} 

컬렉션 속성. 속성에는 "ConditionAttribute"유형의 하나의 속성 만 포함됩니다. "Test1"이있는 속성입니다. 다른 사람은 무시됩니다 ;-(

그래서 AllowMultiple 부동산이 작동하지 않습니다 사전에?

감사 속성

헨릭

답변

0

예, 그렇습니다 작동합니다. 그것을 통해 작동하지 않는 이유는 확실하지 하는 PropertyDescriptors

당신은 항상 수행 할 수 있습니다. Attribute.GetCustomAttributes(methodInfo, typeof(ConditionAttribute))

17

에 따르면,이 전 a post on MSDN에 s를 PropertyDescriptor 클래스의 일부로 사용합니다.

그러나, 실제로 (교체 아웃이 포인팅을위한 Ivan from Mindscape에 감사를) 사용자 정의 속성에 유형 ID를 대체하여 문제를 해결할 수 :

public override object TypeId 
{ 
    get 
    { 
    return this; 
    } 
} 
+0

MVC에서 사용자 지정 ValidationAttribute를 사용하는 동안 비슷한 문제가 발생했습니다. 이것은 내 문제를 해결했다. –

0

이 조정할 수있는 또 다른 방법,

[ConditionAttribute를 (" Test1, Test2, Test3 ")] public Color BackColor {get; 설정;}

및 유효성 검사 코드

,

희미한 lstProperties()를 각각 strProp를 들어 문자열 = _ChkColors.Split (",") 으로 lstPropertyes 에서 문자열로 '유효성 검사 '돌아 다음

관련 문제