Редактирование свойства типа List<T> в дизайнере
От: OrSol  
Дата: 20.05.08 10:05
Оценка:
Есть UserControl у которого есть свойство типа List<MyClass>.
List<MyClass> 
{
    get 
    {
        return _myClassesList;
    }
}


Хочу редактировать его в дизайнере, после помещения контрола на форму.
Свойство в дизайнере видно, при редактировании открывается стандартный дизайнер колекций, где можно добавлять и редактировать элементы списка, но они не сохраняются, после закрытия дизайнера.
Как с этим бороться?
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re: Редактирование свойства типа List<T> в дизайнере
От: DrWolf  
Дата: 23.05.08 09:46
Оценка:
Здравствуйте, OrSol, Вы писали:

OS>Есть UserControl у которого есть свойство типа List<MyClass>.

OS>
OS>List<MyClass> 
OS>{
OS>    get 
OS>    {
OS>        return _myClassesList;
OS>    }
OS>}
OS>


OS>Хочу редактировать его в дизайнере, после помещения контрола на форму.

OS>Свойство в дизайнере видно, при редактировании открывается стандартный дизайнер колекций, где можно добавлять и редактировать элементы списка, но они не сохраняются, после закрытия дизайнера.
OS>Как с этим бороться?

хм...
List<<MyClass>
{
get
{ return _myClassList; }
set { _myClassList=value; }
}
Re[2]: Редактирование свойства типа List<T> в дизайнере
От: OrSol  
Дата: 23.05.08 09:51
Оценка:
Здравствуйте, DrWolf, Вы писали:

DW>хм...

DW>
DW>List<<MyClass>
DW>{
DW>get
DW>{ return _myClassList; }
DW>set { _myClassList=value; }
DW>}
DW>


эх, если б все было так просто. Так тоже не сохрняются изменения
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re: Редактирование свойства типа List<T> в дизайнере
От: Pavel_Agurov Россия  
Дата: 25.05.08 07:06
Оценка: 4 (1)
OS>Есть UserControl у которого есть свойство типа List<MyClass>.
OS>
OS>List<MyClass> 
OS>{
OS>    get 
OS>    {
OS>        return _myClassesList;
OS>    }
OS>}
OS>

OS>Хочу редактировать его в дизайнере, после помещения контрола на форму.

Смотря кто такой MyClass. В общем случае есть два варианта — навесить на это свойство аттрибут [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] или [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]. Во втором случае нужно будет самостоятельно инициализировать ваш лист при создании компонента:

    public class TestControl : UserControl
    {
        private List<MyClass> myList= new List<MyClass>();


Если класс MyClass не сериализуемый, то на него нужно будет навешивать аттрибут TypeConverter и привязывать к нему конвертер типа, который конвертит его в тип InstanceDescriptor.

Если и этого не достаточно — реализуйте сериализацию как вам будет угодно через собственный сериализатор:


  [DesignerSerializer(typeof(TestSerializer),
                              typeof(CodeDomSerializer))]
  public class TestControl : Control
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.