доброго вам всем времени суток. Пишу свой первый контрол - помогите чайнику 
У контрола есть свойство - коллекция обьектов
Код | [TypeConverter(typeof(CollectionTypeConverter))] [DesignerSerializationVisibility( DesignerSerializationVisibility.Content)] public DataObjectProperetyCollection Items { get { return _Items; } set { _Items = value; } }
|
которая на этапе разработки редактируется стандартным CollectionEditor-ом. Эта коллекция содержит обьекты некоторого типа DataObjectPropertyItem (тип для хранения чего-там-либо).
Код | class DataObjectProperetyCollection : ICollection , IList { private DataObjectPropertyItem[] properties; private int propCount;
public void CopyTo(Array array, int index) { Array.Copy(this.properties, 0, array, index, this.Count); }
public int Count { get { return this.propCount; } }
public bool IsSynchronized { get { return false; } }
public object SyncRoot { get { return null; } }
public IEnumerator GetEnumerator() { throw new Exception("The method or operation is not implemented."); }
public int Add(object value) { this.properties[this.propCount++] = (DataObjectPropertyItem)value; return (this.propCount - 1); }
public void Clear() { this.propCount = 0; }
public bool Contains(object value) { return (this.IndexOf(value) >= 0); }
public int IndexOf(object value) { return Array.IndexOf<DataObjectPropertyItem>(this.properties, (DataObjectPropertyItem)value, 0, this.propCount); }
public void Insert(int index, object value) { if (index < this.propCount) { Array.Copy(this.properties, index, this.properties, index + 1, this.propCount - index); } this.properties[index] = (DataObjectPropertyItem)value; this.propCount++; }
public bool IsFixedSize { get { return false; } }
public bool IsReadOnly { get { return false; } }
public void Remove(object value) { int index = this.IndexOf(value); if (index != -1) { this.RemoveAt(index); } }
public void RemoveAt(int index) { if (index < (this.propCount - 1)) { Array.Copy(this.properties, index + 1, this.properties, index, (this.propCount - index) - 1); } this.properties[this.propCount - 1] = null; this.propCount--; }
public object this[int index] { get { return this[index]; } set { if (index >= this.propCount) { throw new IndexOutOfRangeException(); } if ((value != null) && !(value is DataObjectPropertyItem)) { throw new ArgumentException("value"); } this.properties[index] = (DataObjectPropertyItem)value; }
} }
|
делал по советам сзятым с http://www.realcoding.net/article/view/4411. Реализацию интерфейсов ICollection , IList взял из .нет библиотеки при помощи рефлектора.
Проблема 1 свойство контрола указывает на коллекцию обьектов определенного типа. А в дизайн-тайм в редакторе коллекции светится Object.
Проблема 2 даже если в коллекцию я добавляю несколько элементов, то при закрытии редактора коллекции свойсто Items контрола не сохраняется. Ругается на The object '<мой контрол>' returned null for the property Items but this is not allowed. Т.е. насколько я понимаю редактор коллекций не возращает то что я там добавил, и соответственно свойство Items = null.
Подскажите плиз, ато уж который день бьюсь над задачей 
|