1

ViewModel が IView 実装クラスを使用してユーザーとやり取りできるようにする MVVM デザイン パターンの IView を実装しようとしています。IView インターフェイスには、Prompt、Alert & Confirm などの機能があります。CommandLineInteraction、WPFInteraction、TelerikInteraction の 3 つの IView インターフェイスの実装があります。最初の 2 つの動作は似ています (つまり、同期しています)。3 つ目は非同期で動作します。

TelerikInteraction を同期的に動作させたい。つまり、RadWindow.Confirm() または RadWindow.Prompt() の呼び出しに続くコードは、ユーザーが対話するまで待機する必要があります。

以下は、3 つの実装すべてのコード スニペットです。

    //CommandLine Implementation
    public CustomConfirmResult Confirm(string message) {
        Console.WriteLine(message);
        Console.WriteLine("[Y]es    [N]o");
        string s = Console.ReadLine();

        if(s == y || s == Y)
            return CustomConfirmResult.Yes;
        else
            return CustomConfirmResult.No;
    }

    //Windows Implementation
    public CustomConfirmResult Confirm(string message) {
        MessageBoxResult mbr = MessageBox.Show(message, "", MessageBoxButton.OKCancel);

        if(mbr == MessageBoxResult.OK)
            return CustomConfirmResult.Yes;
        else
            return CustomConfirmResult.No;
    }

    //Telerik Implementation
    public CustomConfirmResult Confirm(string message) {
        CustomConfirmResult result;

        RadWindow.Confirm(new DialogParameters{
            Content=message,
            Closed = (o1, e1) =>{
                if(e1.DialogResult == true)
                    result = CustomConfirmResult.Yes;
                else
                    result = CustomConfirmResult.No;
            }
        });

        return result; //Executed before user interacts with the confirm dialog
    }

これらの実装の動作を類似させるにはどうすればよいですか?

ありがとう、

スニル・クマール

4

1 に答える 1

1

Silverlight は、非同期で動作するように設計されています。同期的に動作させようとすると、製品の応答性が制限されます。

代わりに、MessageBox の使用をやめて、代わりに完全な非同期コーディング モデルに移行する必要があります。

onCancel および onConfirm デリゲートまたはアクション (または onYes、onNo または任意のもの) を受け取るヘルパー メソッドを用意することは、求めている質問と回答の状況をコード化する最も簡単な方法です。

于 2011-07-29T09:37:15.737 に答える