типизированная коллеция и PropertyGrid
От: xel  
Дата: 31.08.06 08:38
Оценка:
Во-первых знаю тема поднималась не раз, рыл много... но может лыжи не едут, может в генах ошибка...

собственно трабл: создаю типизированную коллекцию, создаю экземпляр ее как проперть класса, передаю экземпляр класса на растерзание 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; }
}

/// <summary>Тип владельца атрибута</summary>
string m_MetaOwnerType = "";
//[XmlAttribute]
[Browsable(Config.DebugMode), ReadOnlyAttribute(false), Description("Тип владельца атрибута"), Category("Общие")]
/// <summary>Тип владельца атрибута</summary>
public string MetaOwnerType
{
get { return this.m_MetaOwnerType; }
set { this.m_MetaOwnerType = value; }
}

/// <summary>ID владельца атрибута</summary>
int m_MetaOwnerID = -1;
//[XmlAttribute]
[Browsable(Config.DebugMode), ReadOnlyAttribute(false), Description("ID владельца атрибута"), Category("Общие")]
/// <summary>ID владельца атрибута</summary>
public int MetaOwnerID
{
get { return this.m_MetaOwnerID; }
set { this.m_MetaOwnerID = value; }
}


/// <summary>Тип данных</summary>
string m_DataType = "";
//[XmlAttribute]
[Browsable(true), ReadOnlyAttribute(false), Description("Тип данных"), Category("Атрибуты узла")]
/// <summary>Тип данных</summary>
public string DataType
{
get { return this.m_DataType; }
set { this.m_DataType = value; }
}


}



---------------------------- проперть которую пытаюсь редактировать

/// <summary>Атрибуты объекта<see cref="MetaAttribute"/></summary>
MetaAttributeCollection m_Attributes = new MetaAttributeCollection();
[XmlAttribute]
[Browsable(true), ReadOnlyAttribute(false), Description("Атрибуты объекта"), Category("Атрибуты узла")]
/// <summary>Атрибуты объекта<see cref="MetaAttribute"/></summary>
public MetaAttributeCollection Attributes
{
get { return this.m_Attributes; }
set { this.m_Attributes = value; }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.