Я решаю свою проблему.
Я записываю это на этом форуме. Я думаю, что это может быть полезно для других .A
Ниже мое решение:
Итак, я хотел создать свой собственный редактор коллекций, как свойство в классе домена (например, NameTypeList)
Я создал собственный класс witch, в котором есть два поля (строка _name, string _type) и есть методы получения и установки для этих полей. Это класс NameType. Ниже приведен код этого класса (ниже приведен код этого класса):
[Serializable]
public class NameType
{
public NameType()
{
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private string _type;
public string Type
{
get { return _type; }
set { _type = value; }
}
}
Этот класс находится в основном пространстве имен проекта DSL.
Далее мы будем использовать класс System.ComponentModel.Design.CollectionEditor, поэтому нам нужно добавить ссылочный System.Design в наши проекты Dsl и DslPackage.
Итак, мы можем создать собственный редактор для нашего свойства в классе домена. Мы должны создать класс редактора в пользовательской части кода в нашем проекте Dsl.
Мы можем сделать это, используя следующий код:
public class NameTypeEditor : System.ComponentModel.Design.CollectionEditor
{
public NameTypeEditor(Type t)
: base(t)
{
}
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
{
return base.EditValue(context, provider, value);
}
}
Теперь мы должны добавить наш собственный тип в проект Dsl. Мы можем сделать это, щелкнув левой кнопкой мыши в DSL Explorer в корне дерева и выбрав «Добавить новый внешний тип».
Далее мы должны заполнить Имя как «Список» и Пространство имен как «System.Collections.Generic». Итак, у нас есть новый тип как общий список объектов нашего пользовательского класса NameType.
После этого нам нужно только определить новое свойство в нашем DomainClass (например, в DslDefinition Designer, щелкнув правой кнопкой мыши по классу домена и выбрав Add-> DomainProperty)
В Свойствах мы должны определить Имя как, например, NameTypeList, выбрать Тип как Список, выбрать Вид как CustomStorage и установить Пользовательские Атрибуты, такие как System.ComponentModel.Editor {typeof (NameTypeEditor), typeof (System.Drawing.Design.UITypeEditor)}
В конце мы должны определить методы для CustomStorage для нашего свойства NameTypeList, которое мы выбираем в нашем DomainClass.
Мы можем сделать это, создав частичный класс этого класса домена и написав методы GetNameTypeListValue и SetNameTypeListValue.
public partial class ClassElement
{
List<NameType> _nameTypeListClassParams = new List<NameType>();
public List<NameType> GetNameTypeListValue()
{
return _nameTypeListClassParams;
}
public void SetNameTypeListValue(List<NameType> value)
{
if (value != null)
_nameTypeListClassParams = value;
}
}
Теперь у нас есть свойство Collection NameTypeList, и мы можем легко редактировать наш список значений NameType.
Преобразуйте все, соберите и запустите.
Я решил эту проблему таким образом. Я надеюсь, что этот совет поможет вам.