.NET MAUI页面加载时MVVM绑定计时异常问题求助
.NET MAUI页面MVVM绑定计时问题
我在.NET MAUI开发中遇到了页面打开时的MVVM模型绑定计时问题:页面内的Picker控件绑定有时正常,有时失效。为给Picker的ItemsSource加载数据,我通过OnAppearing事件触发ViewModel中的异步命令,该命令会调用内部服务对象异步请求外部API。
我判断问题时好时坏的原因是:内部服务类会将API返回结果缓存10分钟(数据本身不会频繁变动),首次调用时API请求往往来不及完成,导致绑定异常;后续调用直接读取缓存,就能正常工作。
虽然代码采用了标准的Task异步范式,但看起来await并没有等待服务返回结果,就直接执行了InitializeForm里的后续代码。
ViewModel命令代码
public async Task InitializeForm() { IsBusy = true; Title = "Project Information"; var contractorList = await _contractorService.GetActiveContractors(); ContractorListDTO notListedContractor = new ContractorListDTO() { Id = Guid.Empty, FirstName = "Not", LastName = "Listed" }; ContractorListDTO blankContractor = new ContractorListDTO() { Id = Guid.NewGuid(), FirstName = "", LastName = "" }; ContractorList = contractorList.Where(e => e.ContractorType != ContractorType.Designer).ToList(); ContractorList.Add(notListedContractor); ContractorList.Insert(0, blankContractor); SelectedContractor = blankContractor.Id; IsBusy = false; }
Contractor Service方法代码
public async Task<List<ContractorListDTO>> GetActiveContractors() { if (cachedContractors.Count == 0 || cacheExpiration < DateTime.Now) { string address = "/api/contractor/getall"; var returnedItem = await GetDTOAsync<List<ContractorListDTO>>(_httpClient, address); cachedContractors = returnedItem; cacheExpiration = DateTime.Now.AddMinutes(10); } return cachedContractors; }
更新:触发OnAppearing的代码
<ContentPage.Behaviors> <toolkit:EventToCommandBehavior Command="{Binding InitializeFormCommand}" EventName="Appearing" /> </ContentPage.Behaviors>
求各位帮忙分析问题出在哪?
内容的提问来源于stack exchange,提问作者Matt S.
相关产品推荐
相关产品推荐

