Вопрос

Я настраиваю способ отображения типа объекта в PropertyGrid путем реализации ICustomTypeDescriptor.Я разрешаю пользователю создавать свои собственные свойства, которые хранятся в едином словаре ключей и значений.Я могу создать все PropertyDescriptors для этих значений и просмотрите их в сетке свойств.Однако я также хочу показать все свойства по умолчанию, которые в противном случае были бы показаны, если бы PropertyGrid был заполнен посредством отражения, а не моего переопределения ICustomTypeDescriptor.GetProperties метод.

Теперь я знаю, как получить тип объекта, а затем GetProperties(), но это возвращает массив PropertyInfo нет ProperyDescriptor.Итак, как я могу преобразовать PropertyInfo объект типа в PropertyDescriptor объекты для включения в мою коллекцию по индивидуальному заказу PropertyDescriptors?

//gets the local intrinsic properties of the object
Type thisType = this.GetType();
PropertyInfo[] thisProps = thisType.GetProperties();

//this line obviously doesn't work because the propertydescriptor 
//collection needs an array of PropertyDescriptors not PropertyInfo
PropertyDescriptorCollection propCOl = 
    new PropertyDescriptorCollection(thisProps);
Это было полезно?

Решение

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(thisType);

Как в сторону:это не будет включать ваше ICustomTypeDescriptor настройки, но это воля включать любые настройки, сделанные через TypeDescriptionProvider.

(Редактировать) в сторону второго - вы также можете настроить PropertyGrid путем предоставления TypeConverter - намного проще, чем любой ICustomTypeDescriptor или TypeDescriptionProvider - например:

[TypeConverter(typeof(FooConverter))]
class Foo { }

class FooConverter : ExpandableObjectConverter
{
    public override PropertyDescriptorCollection GetProperties(
       ITypeDescriptorContext context, object value, Attribute[] attributes)
    {
        // your code here, perhaps using base.GetPoperties(
        //    context, value, attributes);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top