2011-01-18 9 views
1

私は、HTTPWebRequestを介してデータを取得することを含むWP7用のアプリケーションの作成を開始しています。非同期要求がデータとともに返された後で、ViewModelにデータを戻す最良の方法を見つけようとしています。MVVM-Lightメッセージングを使用したViewModelとモデル間の非同期通信?

モデルとViewModelは、それぞれ独自の名前空間で別々のプロジェクトに分割されているため、MVVM-Lightがこのように動作するかどうかはわかりません。または、モデルの呼び出しが戻った後、軽量のIoC実装とデリゲート/イベントを使用してViewModelにコールバックする必要がありますか?

答えて

0

あなたは正しい場所でリクエストしていますか?通常、モデルには保存/転送したいデータだけが含まれており、ビューモデルはそのモデルのプロパティを変換してそのモデルを表示(または編集)できるようになります。 ModelオブジェクトはHttpWebRequestから戻ってくるものなので、データの取得を処理するためにServiceクラスを使用することを検討することをお勧めします。

どちらの方法でも、私はあなたが同じ場所で応答の要求と解析を処理することを非常にお勧めします。さもなければ、あなたは複数の場所にロジックを広げています。それはちょうど混乱して維持するのが難しいでしょう。

あなたはMVVMを理解するいくつかの助けが必要な場合は、ここであなたがhelpf

+0

デレク、答えのおかげで、私が質問したとき、私はちょっとした瞬間を見せていました。今すぐ適切な場所に物を持っています。 – Rupert

1

サイズ:http://amazedsaint.blogspot.com/2010/10/asynchronous-delegate-command-for-your.htmlを試してみてください。あなたのメソッドのどれも非同期である必要がないので、あなたはAsync Commandを実行するだけです。

私はそう、私は以下のようにRaiseCanExecuteChanged()メソッド、呼び出すことができDelegateCommandを拡張するために、わずかにそれを編集した:

public class AsyncDelegateCommand : DelegateCommand, ICommand 
{ 

    BackgroundWorker _worker = new BackgroundWorker(); 
    Func<bool> _canExecute; 

    /// <summary> 
    /// The constructor 
    /// </summary> 
    /// <param name="action">The action to be executed</param> 
    /// <param name="canExecute">Will be used to determine if the action can be executed</param> 
    /// <param name="completed">Will be invoked when the action is completed</param> 
    /// <param name="error">Will be invoked if the action throws an error</param> 
    public AsyncDelegateCommand(Action action, 
           Func<bool> canExecute = null, 
           Action<object> completed = null, 
           Action<Exception> error = null 
           ) : base(action, canExecute) 
    { 
    ... 
    } 
} 

希望助けます。

関連する問題