我正在用 MVVMLight 编写一个 MVVM Silverlight 应用程序。我在问自己在 Model 和 ViewModel 之间进行通信的最佳方式是什么。我的模型有来自 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 都可以挂钩此操作。
在第二个示例中,我使用经典方法发送在 Completed 事件上触发的回调。只触发了一个回调,但代码更具可读性。
最好的方法是什么?