2011-07-29 14 views
1

MViewデザインパターン用のIViewを実装しようとしています。これにより、ViewModelはIView実装クラスを使用してユーザーと対話できます。 IViewインターフェースは、Prompt、Alert & Confirmのような機能を有する。私はIViewインターフェイスの3つの実装を持っています:CommandLineInteraction、WPFInteraction & TelerikInteraction。最初の2つは行動において同様である(すなわち、それらは同期的である)。 3番目は非同期に動作します。UIスレッドの非同期呼び出しを同期呼び出しに変換する

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 
    } 

は、どのように私は行動のこれらの実装は似て作るのですか?

おかげで、

スニル・クマール

答えて

1

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

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

(またはonYes ONNOまたは何でもあなたが好む)onCancelとonConfirm代表者やアクションをとるヘルパーメソッドを持つあなたは後にしている質問&答え状況の並べ替えをコーディングする最も簡単な方法です。

+0

ありがとうございました。このようにします。 – sunilkumarba

関連する問題