Ben koleksiyonları için özel bir ExpandableObjectConverter
tanımlanmış:Özellik ızgarası genişletme genel bir uygulama için tüm Liste <T> tür tanımlayıcıları ekleyin?
public static class ExpandableObjectManager
{
public static void AddTypeDescriptor(Type tItem)
{
//eventually calls TypeDescriptor.AddAttributes
}
}
: Bu yöntemi kullanarak
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"
}
}
Ve ayrıca sahip özünde yapar ExpandableObjectManager
denilen bir vekil sınıf, Tüm jenerik List<T>
'un propeda genişletilebileceği şekilde tip tanımlayıcı eklemek mümkün mü? rty ızgarası? Örneğin, basit bir Employee
sınıfı verilen:
class Employee
{
public string Name { get; set; }
public string Title { get; set; }
public DateTime DateOfBirth { get; set; }
}
bunu yapabilirim (ve fakat sadece List<Employee>
için çalışır):
ExpandableObjectManager.AddTypeDescriptor(typeof(List<Employee>));
Bütün T
değil, sadece Employee
bahsetmek istediğimiz, Her olası sınıf için 1 satır yazmak zorunda kalmadan. Bunu denedim - işe yaramadı:
ExpandableObjectManager.AddTypeDescriptor(typeof(List<>));
TL; DR:
Beklenen sonuçlar: özellik ızgara SelectedObject
olarak ayarlanmış bir listesi Varsayılan görünüm :
List<Employee>
için bir tür tanımlayıcı eklemek zorunda kalmadan ve tüm List<T>
için bazı genel işleyicilere sahip olmak yerine.
Teşekkür göstermek için özel bir sınıf oluşturmak istemiyorum. Programa gereksiz karmaşıklık katıyor. Ayrıca mevcut meclisler bunu kullanamazlar. –
Neolisk
List<>
devralır ve statik yapıcı kendini kayıt bulunduğunuz kendi liste türü oluşturun. Ne yazık ki, her iki seçenek de benim için işe yaramaz, çünkü # 1 bazı nesneler zaten kendi başımı kurarsam kırılabilir bir nesne dönüştürücüsünün iyi bir uygulamasına sahip olurlar. Örneğin, enums.# 2 ListeyiTamamen anlaşılabilir. Daha iyi bir seçenek bulursam paylaşırım. – Grax
Üçüncü bir seçenek ekledim. İlk önce onu listeledim, çünkü en canlı görünüyor. – Grax