나는 컬렉션에 대한 사용자 정의 ExpandableObjectConverter
정의 :속성 그리드 확장의 일반적인 구현을 위해 모든 목록 <T>에 유형 설명자를 추가 하시겠습니까?
public static class ExpandableObjectManager
{
public static void AddTypeDescriptor(Type tItem)
{
//eventually calls TypeDescriptor.AddAttributes
}
}
:이 방법을 사용
TypeDescriptor.AddAttributes(type,
new TypeConverterAttribute(typeof(ExpandableCollectionConverter)));
:
internal class ExpandableCollectionConverter : ExpandableObjectConverter
{
public override PropertyDescriptorCollection GetProperties(
ITypeDescriptorContext context, object value, Attribute[] attributes)
{
//implementation that returns a list of property descriptors,
//one for each item in "value"
}
}
을 또한이 본질적으로이 작업을 수행 ExpandableObjectManager
라는 프록시 클래스, 모든 generic List<T>
이 prope에서 확장 가능하도록 형식 설명자를 추가 할 수 있습니까? 그리드 그리드? 예를 들어, 간단한 Employee
클래스 제공 :
class Employee
{
public string Name { get; set; }
public string Title { get; set; }
public DateTime DateOfBirth { get; set; }
}
내가이 작업을 수행 할 수 있습니다 (그리고 그것은,하지만 List<Employee>
작동) :
ExpandableObjectManager.AddTypeDescriptor(typeof(List<Employee>));
내가 모든 T
아니라 Employee
을 포함하고 싶습니다, 가능한 각 클래스에 대해 1 행을 쓰지 않아도됩니다. 나는이 시도 - 작동하지 않았다 :
ExpandableObjectManager.AddTypeDescriptor(typeof(List<>));
TL; DR :
예상 결과 : 속성 그리드에 SelectedObject
로 설정 목록의 기본보기 :
List<Employee>
에 대한 유형 설명자를 추가하지 않고 모든 List<T>
에 대한 일반 처리기를 사용하지 않아도됩니다.
감사를을 나타내는 사용자 정의 클래스를 만들고 싶지 않습니다. 그것은 프로그램에 불필요한 복잡성을 추가합니다. 또한 기존 어셈블리에서는 사용할 수 없습니다. –
Neolisk
List<>
에서 상속하고 정적 생성자에 자신을 등록 한 자신의 목록 유형을 만듭니다. 불행히도, # 1 일부 개체는 이미 확장 가능한 개체 변환기의 좋은 구현을 가지고 있기 때문에 어느 옵션도 나를 위해 작동하지 않습니다. 예를 들어 열거 형입니다.# 2 List완전히 이해할 수 있습니다. 더 나은 옵션을 찾으면 공유 할 것입니다. – Grax
세 번째 옵션을 추가했습니다. 나는 그것이 가장 실용적으로 보이기 때문에 먼저 그것을 열거했다. – Grax