我正在使用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事件上触发的回调。只触发了一个回调,但代码更具可读性。
最好的方法是什么?
答案 0 :(得分:1)
我想说:取决于!认真!这取决于
我喜欢第一种方法,因为它给了我类似服务总线的行为,如果我愿意,我可以使用配置。第二个在类型安全方面更具体,因为您可能会在发布消息时出错。