azure - viewmodel 构造函数中的 mvvm light 异步调用

标签 azure mvvm asynchronous windows-phone-8 mvvm-light

我正在使用可移植版本的 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/

相关文章:

javascript - 使用 async/await 仍然返回未定义

c# - 绑定(bind)多功能 WPF DataGrid

Android - 我可以以编程方式进行数据绑定(bind)吗? - 没有布局 XML

c# - 如何在来自 View 模型的异步 Web 客户端调用中使用进度条

ios - 使 requestAVAssetForVideo 同步

javascript - 具有复杂计算的异步回调Javascript

Azure Application Insights 自定义 Cloud_RoleName 初始值设定项声明方法不起作用

azure - powershell 将 blob 上传到 azure blob 存储设置内容类型

c# - 使用 Azure Function 迭代容器中的所有 blob

azure - 二头肌 : policy remediation task complains about missing parameter