4

完全なテストを構成する一連のステップを実行したいと考えています。これらの手順の一部は自動で (情報提供のみ)、その他はユーザーの操作が必要です。テスト ステップはコンパイル時に不明であり、MEF を使用して読み込まれます。

現在、私は次のようなものを持っています

public abstract class TestRunnerBase
{
    public abstract void Run();
}

次のような手順のリストを使用します。

 List<TestRunnerBase> Steps = new List<TestRunnerBase>();

したがって、シリアル化可能なテストを表すすべてのデータは、これまでのところ問題なく動作します。しかし、私が本当に必要としているのは、ユーザーが XML からテストを読み込んで、画面に情報を表示し、結果を収集するオプションを順を追って説明することです。

しかし、コンパイル時に不明なデータのコントロールを作成する方法を考え出そうとすると、最善のアプローチに行き詰まりました。

私はこれを行うことを考えています。カスタム コントロールのリスト (1 ステップ) があり、GUI に最初のステップが表示され、そのコントロールが完了するのを待ちます (ここで、発生したイベントが機能する可能性があると考えていました)。テストが完了するまで、利用可能な場合は次を表示します。

それで、WPFでこれを行うことは可能ですか? それぞれが同じイベントを親コンテナーに発生させることができるコントロールのスタックを WPF で作成できますか、またはそれを行うためのより良い方法はありますか?

しかし、抽象クラスも使用する場合、もちろんC#では多重継承がないため、そこからコントロールを派生させることはできません。

4

2 に答える 2

2

MVVM を使用して、ステップのリストをナビゲートする方法を理解するビューモデルを作成し、ウィザード タイプの構造 (前/次) を提供し、現在のステップを公開します。

入力オプションの具体的なセット(bool、text、date、intなど)があるさまざまな種類の潜在的に未知のステップがある場合、TestRunnerBaseで抽象プロパティを使用して、必要な入力の種類を識別することができると思います(またはなし) オーバーライドする必要がある列挙型を使用します。

次に、データ テンプレートやデータ トリガーを使用して、テストの各ステップで表示される内容を制御できます。メイン ビューモデルは、次のステップに進むための条件が正しいことを確認できます (おそらく、テストの検証)。

考えさせるための疑似コード:

public enum TestInput
{
    None,
    Bool,
    Text
}

public abstract class TestRunnerBase
{
    public abstract TestInput TestInput { get; }
    public bool BoolInput { get; set; }
    public string TextInput { get; set; }
    public abstract bool CanRun()
    public abstract void Run();
}

public class MainViewModel
{
    List<TestRunnerBase> Steps = new List<TestRunnerBase>();
    public TestRunnerBase CurrentStep {get;set;};

    public MainViewModel()
    {
        //loads the Steps
        CurrentStep = Steps
    }

    public Command RunStepCommand
    {
        if (CurrentStep.CanRun())
        {
            CurrentStep.Run();
            CurrentStep = Steps.Next(); //you get the idea
        }
    }
}

XAML では、ContentPresenter を CurrentStep にバインドし、データ テンプレート (および場合によってはデータ トリガー) を使用して、ユーザーに表示される (そしてもちろん UI にバインドされる) ものを制御します。

于 2013-01-29T16:42:02.690 に答える
1

WPF では、XAML を使用してコントロールを動的に作成できます。必要なレイアウトで XAML スニペットを (プログラムまたは手動で)作成し、 XamlReader.Parseを使用してスニペットからツリー全体を作成するだけです。返されたオブジェクトは、ウィンドウのビジュアル ツリーのどこかに挿入できます。

XamlReader によって生成されたビジュアル ツリーからイベントを生成するには、ルーティング イベントを使用できます。

于 2013-01-29T16:32:21.183 に答える