C
Casey Chester
Hi all. I am developing PropertyGrid runtime support for a custom class. One
of my attributes in this class is an ArrayList that holds instances of
another custom class. I have derived a custom collection editor for this
list attribute. When this collection editor is invoked, it does display the
correct caption which I assume means it knows the type of objects it is
managing. My problem is the Add/Remove buttons are still disabled. From all
the research I have done, I believe it is necessary for me to derive this
custom collection editor because I am not working with a collection that
provides access to an Item attribute for type discovery, right? I have no
further enhancements that need to be made to this collection editor, so do I
need to be overriding the EditValue method? If so, what should my
implementation of EditValue be doing? Also, I do not have a custom
TypeConverter written for the EmbeddedObject type. Is this a problem?
If anyone out there can help me, I would be more than grateful. As it sits
right now, I am as clueless as top management at a software design
conference when it comes to collection editors. MSDN is of no help. There
are a few article for the picking out there, but none explain the inner
workings of the CollectionEditor in any detail. If anyone can point be to
some good articles, I would love to see them. I feel like if I could better
understand the CollectionEditor class, I might not be as clueless when
trying to use them in real world scenarios.
Thanks in advance!
Casey Chester
MIS Director
Hirschfeld Steel Co., Inc.
public class BrowsableObject
{
....
....
[Editor(typeof(EmbeddedObjectCollectionEditor), typeof(UITypeEditor))]
public ArrayList EmbeddedObjectList
{
get{ return embeddedObjectList; }
}
....
....
}
public class EmbeddedObjectCollectionEditor : CollectionEditor
{
public EmbeddedObjectCollectionEditor() : base(typeof(EmbeddedObject))
{
}
protected override Type[] CreateNewItemTypes()
{
return new Type[] { typeof(EmbeddedObject) };
}
protected override Type CreateCollectionItemType()
{
return typeof(ProjectPolicy);
}
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
//
// If custom implementation is required, what should it be???
//
return base.EditValue (context, provider, value);
}
}
of my attributes in this class is an ArrayList that holds instances of
another custom class. I have derived a custom collection editor for this
list attribute. When this collection editor is invoked, it does display the
correct caption which I assume means it knows the type of objects it is
managing. My problem is the Add/Remove buttons are still disabled. From all
the research I have done, I believe it is necessary for me to derive this
custom collection editor because I am not working with a collection that
provides access to an Item attribute for type discovery, right? I have no
further enhancements that need to be made to this collection editor, so do I
need to be overriding the EditValue method? If so, what should my
implementation of EditValue be doing? Also, I do not have a custom
TypeConverter written for the EmbeddedObject type. Is this a problem?
If anyone out there can help me, I would be more than grateful. As it sits
right now, I am as clueless as top management at a software design
conference when it comes to collection editors. MSDN is of no help. There
are a few article for the picking out there, but none explain the inner
workings of the CollectionEditor in any detail. If anyone can point be to
some good articles, I would love to see them. I feel like if I could better
understand the CollectionEditor class, I might not be as clueless when
trying to use them in real world scenarios.
Thanks in advance!
Casey Chester
MIS Director
Hirschfeld Steel Co., Inc.
public class BrowsableObject
{
....
....
[Editor(typeof(EmbeddedObjectCollectionEditor), typeof(UITypeEditor))]
public ArrayList EmbeddedObjectList
{
get{ return embeddedObjectList; }
}
....
....
}
public class EmbeddedObjectCollectionEditor : CollectionEditor
{
public EmbeddedObjectCollectionEditor() : base(typeof(EmbeddedObject))
{
}
protected override Type[] CreateNewItemTypes()
{
return new Type[] { typeof(EmbeddedObject) };
}
protected override Type CreateCollectionItemType()
{
return typeof(ProjectPolicy);
}
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
//
// If custom implementation is required, what should it be???
//
return base.EditValue (context, provider, value);
}
}