MVVMLight を使用して MVVM Silverlight アプリケーションをコーディングしています。モデルとビューモデルの間で通信する最良の方法は何かを自問していました。私のモデルには Web サービスからの非同期呼び出しがあり、戻り値を取得する最善の方法がわかりません。
私はこれを試しました:
public static void ModifySomething(Something s)
{
var c = MyServiceFactory.GetService();
c.ModifySomethingCompleted += (sender, e) =>
{
if (e.Error != null)
{
Messenger.Default.Send(new XyzException(e.Error, "ModifyError"));
return;
}
Messenger.Default.Send(e.Result, "ModifyOk");
};
c.ModifySomethingAsync(s);
}
この:
public static void ModifySomething(Something s, Action<Something, Exception> callback)
{
var c = ServiceFactory.RecupererService();
c.ModifySomethingCompleted += (sender, e) =>
{
if (callback != null) callback(e.Result, e.Error);
};
c.ModifySomethingAsync(s);
}
どちらも機能します。最初の例では MvvmLight Messenger を使用しているため、モデルのすべてのメソッドに対して文字列メッセージのリストを登録する必要があり、その後、任意の ViewModel がこのアクションにフックできます。
2 番目の例では、従来のアプローチを使用して、Completed イベントで発生するコールバックを送信します。起動されるコールバックは 1 つだけですが、コードははるかに読みやすくなっています。
最善のアプローチは何ですか?