ExpandoObject를 PropertyGrid의 SelectedObject로 사용하려고합니다. 나는 ExpandoObject에 내가 원하는 속성을 추가하는 방법을 알고 : 예상대로 디버거를 미세생성 된 ExpandoObject 인스턴스 구성원에 특성을 추가 할 수 있습니까?
public dynamic MakePropertyObject()
{
dynamic expando = new ExpandoObject();
var dictionary = expando as IDictionary<string, object>;
foreach(MyClass m in PropertiesINeedToAdd)
dictionary[m.Name] = m.Value;
return expando;
}
이 코드의 작업은 expando
의 속성의 이름과 값을 보여줍니다.
그러나 MakePropertyObject()
의 반환 값을 SelectedObject
속성으로 설정하면 생성 된 속성 중 PropertyGrid에 아무 것도 나타나지 않습니다. 나는 ExpandoObject
의 속성에 DisplayNameAttribute
, DescriptionAttribute
또는 속성이 표시되는 방법을 제어하는 데 사용되는 다른 속성이 PropertyGrid
이 아니기 때문에 이것이 틀린 것 같다고 가정합니다.
몇 가지 독서와 일부 인터넷 검색을 수행했으며 ExpandoObject
의 생성 된 속성을 맞춤 속성으로 장식하는 방법이 있는지 알 수 없습니다. 누구든지 이것이 완료 될 수있는 방법이나 ExpandoObject
을 PropertyGrid
에 표시하는 더 좋은 방법을 알고 있습니까?
해결책 : @Stephen 클리어 리에서 제공
대답은 정확하고 도움이되었다 (감사, 스티븐). 동일한 문제가있는 다른 사람들을 위해 ICustomTypeDescriptor
을 구현하면 완벽하게 작동합니다. ICustomTypeDescriptor
구현 측면 참고로
PropertyGrid
이
ICustomTypeDescriptor
인터페이스를 사용하는 방법입니다.