我开始为WP7编写一个涉及通过HTTPWebRequest检索数据的应用程序,我试图找到在异步请求返回数据后将数据恢复到ViewModel的最佳方法。
模型和ViewModel在它们自己的命名空间中被拆分成单独的项目,所以我不确定MVVM-Light是否可以以这种方式工作。或者我应该只使用轻量级IoC实现和委托/事件,一旦模型中的调用返回,就调用回ViewModel?
答案 0 :(得分:1)
尝试使用大小:http://amazedsaint.blogspot.com/2010/10/asynchronous-delegate-command-for-your.html。非常适合测试,因为您的方法都不需要异步,您只需执行Async Command。
我稍微编辑了它以扩展DelegateCommand所以我可以调用RaiseCanExecuteChanged()方法,如下所示:
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)
{
...
}
}
希望有帮助。
答案 1 :(得分:0)
您确定在正确的位置提出请求吗?通常,模型只包含您要存储/传输的数据,而视图模型将处理转换该模型的属性,以便View可以显示(或编辑)该模型。我认为Model对象就是你要从HttpWebRequest返回的东西,所以你可能想考虑使用Service类来处理检索数据,虽然这可能对你的应用程序来说太过分了。
无论哪种方式,我都非常建议您在同一个地方处理请求和解析响应;否则你将逻辑分散到多个地方,这会让人感到困惑和难以维护。
如果你需要一些帮助理解MVVM,这里有一些你可以找到帮助的资源