質問
DSLクラスの形状プロパティについて質問があります。
私は一種のDSLツールを作成します。クラス図のような機能が少し欲しいです。
モデルに形状があります。属性と操作用のコンパートメントパーツを備えたクラスシェイプがあります。 モデルには、属性クラスと操作クラスがあります。
本のように属性用に「NameAndType」、「Name」、「Type」プロパティを作成しました 「VisualStudioDSLツールを使用したドメイン固有の開発。 スティーブクック、ガレスジョーンズ、スチュアートケント、アランキャメロンウィルズ」404ページ。
うまく機能しますが、操作クラスのパラメーターの動的リストが必要です。ある種のCollectionsプロパティ。
次に、操作用のNameAndTypeコレクションプロパティを作成します。操作(メソッド)で使用するパラメーターの数を選択したい。それは動的リスト(一種のコレクション)でなければなりません
どうすればこれができるか知っていますか?
よろしく アダム
解決
問題を解決します。
私はこのフォーラムにこれを書き留めます。他の人にも役立つと思います。A
以下が私の解決策です:
そこで、ドメインクラスのプロパティ(NameTypeListなど)のような独自のコレクションエディタを作成したかったのです
カスタムクラスwitchを作成しました。2つのフィールド(string _name、string _type)があり、これらのフィールドのゲッターとセッターがあります。これはNameTypeクラスです。このクラスのコードを以下に示します(以下はこのクラスのコードです): ジェネラコディセタグプレ
このクラスは、Dslプロジェクトのメイン名前空間にあります。
次に、System.ComponentModel.Design.CollectionEditorクラスを使用するため、参照System.DesignをDslおよびDslPackageプロジェクトに追加する必要があります。
したがって、ドメインクラスのプロパティのカスタムエディタを作成できます。 Dslプロジェクトのカスタムコード部分にエディタークラスを作成する必要があります。 以下のコードを使用してそれを行うことができます: ジェネラコディセタグプレ
次に、Dslプロジェクトにカスタムタイプを追加する必要があります。これを行うには、ツリーのルートにあるDSL Explorerでマウスの左ボタンをクリックし、[新しい外部タイプの追加]を選択します。
次に、名前を「リスト」、名前空間を「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メソッドを記述します。 ジェネラコディセタグプレ
これでコレクションプロパティNameTypeListができ、NameType値のリストを簡単に編集できます。
すべてを変換し、ビルドして実行します。
この方法でこの問題を解決しました。このアドバイスがお役に立てば幸いです。