我正在通过实施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);
答案 0 :(得分:15)
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);
}
}