Pregunta

Tengo una pregunta sobre las propiedades de forma de clase de DSL.

Creo una especie de herramienta DSL.Quiero tener una funcionalidad un poco como en el diagrama de clases.

Tengo formas en mi modelo.Tengo Class Shape con parte de compartimento para atributos y operaciones. En el modelo tengo clase de atributo y clase de operación.

Creé la propiedad "NameAndType", "Name" y "Type" para los atributos como en el libro "Desarrollo específico de dominio con Visual Studio DSL Tools. Steve Cook, Gareth Jones, Stuart Kent, Alan Cameron Wills "en la página 404.

Funciona muy bien, pero quiero tener una lista dinámica de parámetros en la clase de operaciones.Algún tipo de propiedad de Colecciones.

Ahora quiero crear la propiedad de colecciones NameAndType para operaciones.Quiero elegir cuántos parámetros quiero usar en mi operación (método).Debe ser una lista dinámica (una especie de colección)

¿Sabes cómo puedo hacer esto?

Saludos Adán

¿Fue útil?

Solución

Resolución de mi problema.

Escribo esto en este foro. Creo que podría ser útil para otros .A

A continuación es mi solución:

Entonces, quería crear mi propio editor de colección como una propiedad en una clase de dominio (por ejemplo, nametypelist)

He creado Class Class Witch TIENE DOS CAMPOS (STRING _NAME, STRING _TYPE) Y TIENE CONTRADOS Y SONTERS PARA ESTOS CAMPOS. Esta es la clase NameType. Podemos ver el código de esta clase a continuación (a continuación se encuentra el código de esta clase):

[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; }
    }
 }

Esta clase está en el espacio de nombres principal del proyecto DSL.

Siguiente, usaremos la clase System.COMPonentModel.design.collectionEditor, por lo que necesitamos agregar un sistema de referencia. Disign a nuestros proyectos DSL y DSLPACKAGE.

Entonces, podemos crear editor personalizado para nuestra propiedad en clase de dominio. Tenemos que crear una clase de editor en la parte de código personalizado en nuestro proyecto DSL. Podemos hacer eso usando el código inferior:

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);
    }
}

Ahora, deberíamos agregar nuestro tipo personalizado en el proyecto DSL. Podemos hacerlo haciendo clic en el botón izquierdo del ratón en DSL Explorer en la raíz del árbol y seleccione "Agregar nuevo tipo externo".

A continuación, tenemos que rellenar el nombre como "Lista" y el espacio de nombres como "System.Collections.Generic". Así que tenemos un nuevo tipo como una lista genérica de objetos de nuestra clase personalizada NameType.

Después de eso, solo tenemos que definir nuevas propiedades en nuestra Clase de DomainClass (por ejemplo, en DSLDEFINITE Designer haciendo clic en el botón derecho del mouse en la clase de dominio y elija Agregar-> DomainProperty)

En las propiedades. Tenemos que definir el nombre, por ejemplo, NametyPelist, elija Tipo como lista, elija TIPO como CustomStorage y configure los atributos personalizados como System.PonentModel.Editor {TypeF (NametyPeeditor), TipoF (System.Drawing.design.udespeeditor)}

Al final, tenemos que definir métodos para CustomStorage para nuestra propiedad NametyPelist que elegimos en nuestra clase de dominio.

Podemos hacerlo creando una clase parcial de esta clase de dominio y escriba GetNapetyPelistValue y SetNapetyPelistValue Methods.

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;
    }
}

Ahora tenemos la propiedad NametyPelist y podemos editar nuestra lista de valores de Nametype de manera fácil.

Transformar todo, construirlo y ejecutarlo.

Resolví este problema de esta manera. Espero que este consejo te ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top