首页 > 解决方案 > 如何在异步任务列表中创建 DataGrid ItemSource

问题描述

我需要获取一个列表作为 wpf 中 DataGrid 的 ItemSource。我可以从我的异步方法中得到结果,如下所示:

public async Task<List<ManualReadTag>> GetManuallyReadTags(ParameterManualTags model { ..... }

我尝试在我的 MainWindow.xaml 中的 DataGrid 中显示它的值,如下所示:

public partial class MainWindow : Window
{
    readonly ApplicationController _ac = new ApplicationController();
    private Task<List<ManualReadTag>> _manualReadTagList = null;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void BtnGEtManualCount_OnClick(object sender, RoutedEventArgs e)
    {
        GetManuallyReadTags();
    }

    private void GetManuallyReadTags()
    {
        var model = new ParameterManualTags
        {
            Lane = Convert.ToInt32(TxtLane.Text),
            Plaza = Convert.ToInt32(TxtLane),
            DateTo = DateTo.DisplayDate,
            DateFrom = DateFrom.DisplayDate
        };
         _manualReadTagList = _ac.GetManuallyReadTags(model);
        ViewingGrid.ItemsSource = _manualReadTagList;
    }
}

但是在 ViewingGrid.ItemsSource = _manualReadTagList; 它给了我一个错误:

严重性代码描述项目文件行抑制状态错误 CS0266 无法将类型“System.Threading.Tasks.Task>”隐式转换为“System.Collections.IEnumerable”。存在显式转换(您是否缺少演员表?) TagReporting D:\Projects\Lane\Antenna_Reading\TagReporting\TagReporting\MainWindow.xaml.cs 38 Active

如何将异步 Task 方法的结果用作数据网格的 ItemSource?谢谢你。

标签: c#wpf

解决方案


首先,如果GetManuallyReadTags是一个async方法,它的名字不是很好,它应该有一个 async 后缀GetManuallyReadTagsAsync以使其明显。

其次,它是异步调用的await理想选择

private async Task GetManuallyReadTagsAsync()
{
    var model = new ParameterManualTags
    {
        Lane = Convert.ToInt32(TxtLane.Text),
        Plaza = Convert.ToInt32(TxtLane),
        DateTo = DateTo.DisplayDate,
        DateFrom = DateFrom.DisplayDate
    };

     _manualReadTagList = await _ac.GetManuallyReadTags(model);
    ViewingGrid.ItemsSource = _manualReadTagList;
}

您还可以将类型更改_manualReadTagList

private List<ManualReadTag> _manualReadTagList;

最后调用GetManuallyReadTagsAsync()异步事件处理程序:

private async void BtnGEtManualCount_OnClick(object sender, RoutedEventArgs e)
{
    await GetManuallyReadTagsAsync();
}

推荐阅读