問題を解決します。
私はこのフォーラムにこれを書き留めます。他の人にも役立つかもしれないと思います。
以下は私の解決策です:
そのため、ドメインクラスのプロパティ(NameTypeListなど)のような独自のコレクションエディタを作成したいと思いました。
私はカスタムクラスwitchを作成しました。2つのフィールド(string _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でマウスの左ボタンをクリックし、[新しい外部タイプの追加]を選択します。
次に、Nameを「List」、名前空間を「System.Collections.Generic」と入力する必要があります。したがって、カスタムクラスNameTypeのオブジェクトのジェネリックリストとして新しいタイプがあります。
その後、DomainClassで新しいプロパティを定義するだけで済みます(たとえば、DslDefinition Designerで、ドメインクラス上でマウスの右ボタンをクリックし、[追加]-> [DomainProperty]を選択します)。
プロパティで、NameをNameTypeListなどとして定義し、TypeをListとして選択し、KindをCustomStorageとして選択し、System.ComponentModel.Editor {typeof(NameTypeEditor)、typeof(System.Drawing.Design.UITypeEditor)}のようなカスタム属性を設定する必要があります。
最後に、DomainClassで選択したプロパティNameTypeListのCustomStorageのメソッドを定義する必要があります。
これを行うには、このドメインクラスの部分クラスを作成し、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;
}
}
これで、コレクションプロパティNameTypeListが作成され、NameType値のリストを簡単に編集できます。
すべてを変換し、ビルドして実行します。
私はこの方法でこの問題を解決しました。このアドバイスがお役に立てば幸いです。