我正在使用可移植版本的 mvvmlight 开发 win Phone 8 应用程序。
在创建 ViewModel 时,我必须调用一个服务,该服务使用 Azure 移动服务 Sdk 从 Azure 移动服务读取数据。
Sdk api 使用 async/await 来完成工作,我无法在 ViewModel 或 Service 构造函数中执行异步调用。
代码是这样的:
public ListaArtiModel(INavigate navigationService)
{
_navigationService = navigationService;
ArtiMarzialiService artiService = new ArtiMarzialiService();
List<ArteMarziale>risultato = await artiService.ListaArti();
}
编译器告诉
错误 1 “await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并将其返回类型更改为“Task”。
我该如何解决这个问题? 谢谢, 卢卡
最佳答案
我有一个"task notifier" type在我的AsyncEx library这本质上是一个 INotifyPropertyChanged
Task<T>
的包装。您可以像这样使用它:
public ListaArtiModel(INavigate navigationService)
{
_navigationService = navigationService;
ArtiMarzialiService artiService = new ArtiMarzialiService();
Arti = NotifyTaskCompletion.Create(LoadArti(artiService));
}
private async Task<ObservableCollection<ArtiMarziali>> LoadArti(ArtiMarzialiService artiService)
{
return new ObservableCollection<ArtiMarziali>(await artiService.ListaArti());
}
public INotifyTaskCompletion<ObservableCollection<ArtiMarziali>> Arti { get; private set; }
然后您的数据绑定(bind)代码可以使用 Arti.Result
, Arti.IsFaulted
, Arti.ErrorMessage
等
关于azure - viewmodel 构造函数中的 mvvm light 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20805515/