This is usually a problem if you have a custom collection type MyCollection which itself can take items of type MyCollection.
The problem is because a single instance of a UITypeEditor is used by the framework irrespective of how many types and instances it serves to edit. Which means you cannot start editing your MyCollection from within a MyCollection editor, since the editor is already open.
To work around this problem, you can provide a custom editor as follows:
public class CustomCollectionEditor : CollectionEditor
{
// The base class has its own version of this property
// cached CollectionForm
private CollectionForm collectionForm;
public CustomCollectionEditor(Type type)
: base(type)
{
}
public override object EditValue(
ITypeDescriptorContext context, IServiceProvider provider,
object value)
{
if(this.collectionForm != null && this.collectionForm.Visible)
{
// If the CollectionForm is already visible, then create a new instance
// of the editor and delegate this call to it.
BarItemsCollectionEditor editor = new BarItemsCollectionEditor(this.CollectionType);
return editor.EditValue(context, provider, value);
}
else return base.EditValue(context, provider, value);
}
protected override CollectionForm CreateCollectionForm()
{
// Cache the CollectionForm being used.
this.collectionForm = base.CreateCollectionForm();
return this.collectionForm;
}
}
Share with