Во-первых знаю тема поднималась не раз, рыл много... но может лыжи не едут, может в генах ошибка...
собственно трабл: создаю типизированную коллекцию, создаю экземпляр ее как проперть класса, передаю экземпляр класса на растерзание PropertyGrid_у. коллекцию он видит, открывает стандартный редактор. Но редактировать и добавлять элементы коллекции отказывается...
Реализация:
[Serializable]
[DebuggerDisplay("{DebuggerDisplayString()}")]
public class CollectionBase<T> : ICollection<T>, ICollection
------------явно указываю редактор
------------если не указываю история та же....
[Serializable]
[Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public class MetaAttributeCollection : CollectionBase<MetaAttribute>, IEnumerable<MetaAttribute>
{
}
------------ делаю свой редактор---- вида:
-----------------такая версия тоже не катит-----------------------
[Serializable]
[Editor(typeof(MetaAttributeCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public class MetaAttributeCollection : CollectionBase<MetaAttribute>, IEnumerable<MetaAttribute>
{
}
public class MetaAttributeCollectionEditor:CollectionEditor
{
public MetaAttributeCollectionEditor():base(typeof(MetaAttribute))
{
}
protected override object CreateInstance(Type type)
{
return new MetaAttribute();
}
}
-----------------такая версия тоже не катит-----------------
[DefaultPropertyAttribute("MetaAttrName")]
/// <summary>
/// Мета-описание атрибута
/// </summary>
public class MetaAttribute
{
public MetaAttribute()
{
}
/// <summary>ID мета атрибута</summary>
int m_MetaAttrID = -1;
//[XmlAttribute]
[Browsable(Config.DebugMode), ReadOnlyAttribute(false), Description("ID мета атрибута"), Category("Общие")]
/// <summary>ID мета атрибута</summary>
public int MetaAttrID
{
get { return this.m_MetaAttrID; }
set { this.m_MetaAttrID = value; }
}
/// <summary>Наименование мета атрибута</summary>
string m_MetaAttrName = "";
//[XmlAttribute]
[Browsable(true), ReadOnlyAttribute(false), Description("Наименование мета атрибута"), Category("Общие")]
/// <summary>Наименование типа атрибута</summary>
public string MetaAttrName
{
get { return this.m_MetaAttrName; }
set { this.m_MetaAttrName = value; }
}