我需要获取一个列表,作为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有效
如何将异步Task方法的结果用作数据网格的ItemSource?谢谢。
答案 0 :(得分:1)
首先,如果GetManuallyReadTags
是一个 async 方法,但其命名方法不是很好,它应该具有一个异步后缀GetManuallyReadTagsAsync
以使其明显。
第二,它是await
async 调用的理想选择。
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();
}