调用异步方法在视图模型的构造函数中加载数据有一个警告

本文关键字:加载 数据 有一个 警告 构造函数 异步方法 视图 模型 调用 | 更新日期: 2023-09-27 18:11:30

我的视图包含一个ListView,它显示了一些来自互联网的数据,我创建了一个异步方法来加载数据,并在我的视图模型的构造函数中调用该方法。它有一个警告提示我现在使用await关键字。

在构造函数中异步加载数据的其他解决方案吗?

调用异步方法在视图模型的构造函数中加载数据有一个警告

有几个可以应用的模式,都在Stephan Cleary的文章中提到过。

然而,让我提出一些不同的建议:

因为你是在一个WPF应用程序中,我会使用FrameworkElement.Loaded事件并将其绑定到ViewModel中的ICommand。有界命令将是一个可以等待的Awaitable DelegateCommand。我还将利用System.Windows.Interactivity.InvokeCommandAction

XAML视图:

<Grid>
 <interactivity:Interaction.Triggers>
     <interactivity:EventTrigger EventName="Loaded">
         <interactivity:InvokeCommandAction Command="{Binding MyCommand}"/>
     </interactivity:EventTrigger>
 </interactivity:Interaction.Triggers>
</Grid>

ViewModel:

public class ViewModel
{
    public ICommand MyCommand { get; set; }
    public ViewModel()
    {
        MyCommand = new AwaitableDelegateCommand(LoadDataAsync);
    }
    public async Task LoadDataAsync()
    {
        //await the loading of the listview here
    }
}

我个人会将数据的加载委托给方法,例如Task LoadDataAsync(…)…然而,如果你将async方法的结果赋值给一个字段,那么警告就会消失。如果你正在调用Wait(),那么你是否应该首先调用异步方法是值得怀疑的。

请参阅http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html获取您可能感兴趣的异步初始化模式。