Re: Работа с коллекциями в дизайн-тайме
От: m_alx  
Дата: 19.09.09 00:06
Оценка:
Мне пришлось делать только это:

1. Создать класс коллекции: public class MyItemCollection : ICollection, IList, IEnumerable с переопределением методов Add, Remove и т.д.
1.1 Определить:

private MyItemCollection myitems;

public MyItemCollection MyItems
{
get { return myitems; }
}

2. В xmta указать:
<Property Name="MyItems">
<DesignerSerializationVisibility>DesignerSerializationVisibility.Content</DesignerSerializationVisibility>
</Property>
Этого было достаточно — сериализуется нормально и работает. Возможно заковыка в первом пункте? Хотя, возможно, я что-то забыл — нужно покопаться в коде... Во всяком случае есть работающий пример..

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.

А>У меня следующая проблема.
А>Пишу приложение под .net compact framework 3.5. Возникла необходимость создать контрол, для которого в дизайн-тайме необходимо иметь возможность редактирования коллекции объектов некоторого (самодельного) класса в качестве свойства данного контрола.
А>Для этого я завел поле типа List<MyClass> и соотв. read-only свойство. В конструкторе прописал его инициализацию ДО вызова InitializeComponents().
А>В файле DesignTimeAttributes.xmta добавил для этого свойства строку: <DesignerSerializationVisibility>DesignerSerializationVisibility.Content</DesignerSerializationVisibility>.
А>Сбилдил сборку. Смотрю сборку ...asmmeta.dll через reflector, атрибут правильно подцепился.
А>Кладу контрол на тестовую форму в дизайнере: свойство видно, но нет характерной строки "(Collection)", которая видна при редактировании свойств-коллекций в дизайнере. При редактировании свойства происходит добавление элементов коллекции, вроде все нормально. Но при повторном редактировании добавленные ранее элементы не видны. При этом в файле ...design.cs не добавляются строки типа MyProperty.Add(MyElement), т.е. инициализация элементов и задание их свойств есть, а добавления их в коллекцию нет.
А>Подумал, может у меня руки кривые, сделал все то же самое в тестовом приложении под "большой" framework (только вместо xmta сразу в коде установил атрибут [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]) — все нормально работает, т.е. проблема именно при работе с compact framework.
А>Может кто-то уже сталкивался с такой проблемой или знает, как ее решить? Помогите пожалуйста, очень надо, сроки горят...

А>ЗЫ: пробовал устанавливать значение атрибута Editor через xmta-файл, заменять List<MyClass> на MyClassCollection : BaseCollection, IList, ICollection, IEnumerable — ничего не помогает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.