我开始研究 MAUI Blazor 以将 Android 中的一些应用程序迁移到 iOS。我在 Blazor 组件的依赖注入方面遇到了一些困难。
这是我创建的用于列出一些项目的卡片:
<h3>LoteCard</h3>
<div class="row">
@foreach (Lote l in lstLotesFiltrada)
{
<div class="col-sm-4 p-2">
<div class="lote-card">
<div class="lote-card-header">
<h3>l.numLote:l.pesoLote</h3>
</div>
if (visible){
<p> this is visible</p>
}
</div>
</div>
}
</div>
@code {
[Parameter]
public bool visible { get; set; }
[Parameter]
public List<Lote> lstLotesFiltrada { get; set; } = new List<Lote>();
}
这是 CardComponent 的代码:
<LoteCard lstLotesFiltrada="lstLotesFiltrada" visible="isVisible"/>
@code {
private bool isVisible = true;
private List<Lote> lstLotesFiltrada = new List<Lote>();
[Inject]
private ILotesManager lotesManager { get; set; } = new LotesManager();
protected override async void OnInitialized()
{
base.OnInitialized();
loadLotes();
int x = 1;
}
private async void loadLotes()
{
List<Lote> tmpLstLotesFiltrada = await lotesManager.getLoteByIdPropriedade(idPropriedade: "-Mfp3q1ma0ZkFsIUXqyE");
lstLotesFiltrada = tmpLstLotesFiltrada;
}
问题是,当我调用“loadLotes()”时,它会等待结果。但是,代码继续前进,forLoop 在带有空列表的 Card 上执行。之后“getLote...”方法返回包含项目的列表。
执行顺序为:
我知道这与异步代码有关,但我很难找到解决方案。
请帮忙!谢谢!
您的异步方法应该返回一个任务,并且您应该正确覆盖异步
OnInitializedAsync
。
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
await loadLotes();
int x = 1;
}
private async Task loadLotes()
{
List<Lote> tmpLstLotesFiltrada = await
lotesManager.getLoteByIdPropriedade(idPropriedade: "-Mfp3q1ma0ZkFsIUXqyE");
lstLotesFiltrada = tmpLstLotesFiltrada;
}
根据文档:
对于除事件处理程序之外不返回值的方法,您可以 应该返回一个任务,因为异步方法返回
等不及了。此类方法的任何调用者都必须继续 无需等待调用的异步方法完成即可完成。void