Получите дескрипторы свойств по умолчанию для типа.
-
09-09-2019 - |
Вопрос
Я настраиваю способ отображения типа объекта в 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);
}
}