【发布时间】:2020-06-23 02:41:25
【问题描述】:
似乎StateHasChanged() 仅在对任务执行等待操作后触发组件的重新渲染(找到here)。
所以我只想使用StateHasChanged 进行重新渲染,而不是使用Task.delay 或Task.Run。
这是我的代码:
protected async Task ClearSearch()
{
SearchTestCoupon = new Mechanic.Shared.TestCouponSearch();
IsBusy = true;
TestCouponGroups = new List<Mechanic.Shared.TestCouponGroup>();
StateHasChanged(); // << -------- **FIRST TIME**
//await Task.Delay(TimeSpan.FromSeconds(1));
await GetTestCouponGroups(SearchTestCoupon);
}
protected async Task GetTestCouponGroups(object args)
{
TestCouponGroups = await TestCouponService.GetTestCouponGroupsAsync(SearchTestCoupon);
IsRowSelected = false;
IsBusy = false;
StateHasChanged(); // << -------- **SECOND TIME**
}
这里我使用的是使用IsBusy 激活的加载器。但是第一次调用StateHasChanged时不起作用,如代码中所述。
但它第二次按预期呈现组件。
我使用过Task.Delay,但它破坏了我的其他功能,例如清除网格和显示搜索数据等。
【问题讨论】:
-
我也提出了疑问
-
你的问题是一样的,但你不喜欢这个答案?
-
我不想使用上面我在问题中提到的 Task.Delay 或 Task.Run。