我有一个PropertyGrid,其中包含类型为class1
的对象的SelectedObject。
我正在为ICustomTypeDescriptor
对象实现class1
接口,我从另一个对象PropertyDescriptorCollection
获得class2
,并且需要显示class2
PropertyGrid中的PropertyDescriptors
以及class1
PropertyDescriptors
。
我在class2
PropertyDescriptors
的PropertyGrid中显示以下错误:
对象与目标类型不匹配。
以下是我的代码,无法使用class2
PropertyDescriptors
:
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(this);
var propertyDescriptors = new List<PropertyDescriptor>();
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
{
propertyDescriptors.Add(propertyDescriptorCollection[i]);
}
return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}
以下是我正在处理的代码:
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(this);
var propertyDescriptors = new List<PropertyDescriptor>();
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
{
propertyDescriptors.Add(propertyDescriptorCollection[i]);
}
var class2PropertyDescriptorCollection = TypeDescriptor.GetProperties(class2);
for (int i = 0; i < class2PropertyDescriptorCollection.Count; i++)
{
propertyDescriptors.Add(class2PropertyDescriptorCollection[i]);
}
return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}
当PropertyGrid中显示来自PropertyDescriptors
的{{1}}时,如何显示class2
中的PropertyDescriptors
?
答案 0 :(得分:0)
您已将propertyDescriptorCollection声明为PropertyDescriptorCollection类型,但已使用var作为class2PropertyDescriptorCollection。如果您尝试以下操作该怎么办:
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(this);
var propertyDescriptors = new List<PropertyDescriptor>();
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
{
propertyDescriptors.Add(propertyDescriptorCollection[i]);
}
PropertyDescriptorCollection class2PropertyDescriptorCollection = TypeDescriptor.GetProperties(class2);
for (int i = 0; i < class2PropertyDescriptorCollection.Count; i++)
{
propertyDescriptors.Add(class2PropertyDescriptorCollection[i]);
}
return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}