0

おはよう、

私はすべて同じ戻り値の型を持つメソッドの動的セットを持っていResultSetます。を表示する UI があるResultSetので、残っているのは、メソッドをパラメーター化するための UI を提供することです。たとえば、次のメソッドがあるとします。

public ResultSet FindNew (DateTime date, int id)
public ResultSet FindOld (DateTime date, int id)
public ResultSet FindMerged (DateTime date, int[] id)
public ResultSet FindNew (DateTime date, string name)

リフレクションを使用して、クラス内の正しい戻り値の型を持つすべてのメソッドのドロップダウンを提供したいと考えています。選択すると、メソッドをパラメーター化するために必要な入力フォームを生成したいと思います。その後、ユーザーはクエリを送信して、結果を確認するか、発生したエラーを通知することができます。

C# の知識を使ってこの機能を単純な方法で実装できると思いますが、私の探求に役立つ WPF の機能があることを期待していました。

編集

質問が広すぎたことをお詫びします。

ビューでこれにバインドして、ユーザーが各パラメーターの値を入力できるようにフォームを作成するにIEnumerableは どうすればよいでしょうか?ParameterInfo[]

具体的には、可能であればMVVMを壊さないでください。私が見ることができる問題は次のとおりです。

  • ParameterInfo を Label およびそのタイプに関連するデータ入力コンポーネントにレンダリングする
  • データ入力コンポーネントを ViewModel 内の何かにバインドして、値を使用できるようにする

現時点では、カスタム タイプまたは ParameterInfo の Tuple とそのパラメーターの現在の値を使用することを検討しています。次に、DataTemplates を使用して、正しいデータ入力コンポーネント (DatePicker 対 TextBox 対 ComboBox) を表示できます。

NB winforms では、これはPropertyGridによって達成されました。同じことを達成しようとしているオープン ソースの WPF プロジェクトがありますが、依存関係に関するプロジェクトの制約のため、独自の実装を使用したいと考えています。

4

2 に答える 2

1

あなたの質問が次の場合:

  1. 同様の戻り値の型を持つ関数のリストを提供 (リストは変更される可能性があります)
  2. 各関数のパラメーター タイプに対して有効な入力コントロール (または入力コントロールのコレクション) を構築します。
  3. これらの入力コントロールで収集された値を各関数の呼び出しに渡します
  4. 各関数の表示結果

あなたはおそらくここであまりにも多くのダイナミズムを見ています. コードでコントロールを構築するか (バインディングを指定したため、これはおそらく必要なものではありません)、次のアルゴリズムを検討することができます (各関数にパラメーターが 1 つしかない場合)。

  1. 関数ごとに、オブジェクトを作成します。これには多数のブール プロパティが必要であり、それぞれが各タイプの入力コントロールにマップされます。たとえば、UseCheckBoxUseNumericSpinnerUseIntArray、これらのプロパティの最大 1 つが一度に true になる可能性があります。または、1 つの Enum プロパティを使用できます。これらのプロパティは、明らかに関数のパラメーターの型に基づいている必要があります。
  2. XAML で、関数を含むマスター アイテム コンテナーを作成します。
  3. 可能なすべての種類の入力コントロール (数値スピナー、日付ピッカー、テキスト ボックス、スライダーなど) を含むユーザー コントロールを作成します。
  4. このユーザー コントロールをマスター アイテム コントロールのデータ テンプレートに配置します。
  5. 各入力コントロールの可視性を適切なブール プロパティにバインドします (たとえば、CheckBox.Visibility を UseCheckBox にバインドする必要があります)。ブール値を Visilbility 値に変換するには、カスタム コンバーターを使用する必要がある場合があります。または、列挙プロパティを使用している場合は、列挙値にバインドします。
  6. オブジェクトのリストをアイテム コントロールのデータ コンテキストにバインドします。

このメソッドでは、オブジェクトのリストを項目コントロールにバインドすると、関数ごとに 1 つのユーザー コントロールのリストが作成されます。各ユーザー コントロールでは、バインドにより、1 つの入力コントロールのみが表示されることが自動的に保証されます。

于 2011-03-22T10:55:46.880 に答える
0

あなたが何を望んでいるのかはまったく明らかではありません。一連の関数のパラメーターに基づいて入力コントロールを動的に作成しますか?

その場合、私がそれを行う方法は次のとおりです。

  1. 各パラメータ タイプに基づいて 1 つのクラスを定義します。
  2. これらのクラスはすべて、インターフェイスを実装するか、作成するコントロールの種類を示すメソッドを使用して基本クラスから継承する必要があります。
  3. IEnumerable には、これらのクラスのリストが含まれている必要があります
  4. これらのクラスをループして、各タイプに基づいて新しい入力コントロールをインスタンス化することにより、コントロールを動的に作成するか、または
  5. コレクションをアイテム コンテナー要素の DataContext にバインドします。要素のアイテム テンプレートには、入力コントロールのすべての可能なフォームを含む複合ユーザー コントロールが含まれている必要がありますが、タイプ パラメーターに基づいて一度に表示できるのは 1 つだけです。ユーザーコントロールの値は、可視入力コントロールの値である必要があります
  6. これらすべての入力コントロールから値を取得したら、それらをオブジェクトを受け入れる共通の抽象 Find メソッドに戻しますが、各クラスのオーバーライド実装で型チェックを行います。
于 2011-03-22T09:35:43.903 に答える