如何确保Blazor渲染器识别集合更改 [英] How to ensure the Blazor renderer recognises a collection change
本文介绍了如何确保Blazor渲染器识别集合更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
作为内容管理页面的一部分,我有一个图像库编辑器,它显示图像列表并允许用户添加和删除图像。这是Blazor服务器端。
有一个InputFile按钮连接到ImageUpload函数,该函数在更新后重新获取图像列表。该列表绑定到List<ImageItemViewModel> ImageList
,只是div中的@foreach
。ImageUpload函数完成后,它向服务器API请求当前图像列表并执行以下操作:
ImageList.Clear()
- ...通过API获取图片并进行一些处理,生成一些视图模型...
ImageList.AddRange(...image view models...)
Blazor
我只是猜测,您可能正在使用返回空的推荐答案事件处理程序方法(或者有一个子方法执行类似的操作)。您的图像处理代码几乎肯定会运行异步代码。在第一次交出时,控制权就交还了。在没有要等待的任务的情况下,它运行StateHasChanged直到完成。此时列表已清除。
更新
从注释中可以看出,代码路径中有一个不需要等待的异步方法。结果是一样的。处理程序可能会返回一个任务,但如果代码路径中有一个未等待的异步任务,则在第一次屈服时,父代码块将运行到完成,Tasks
完成,事件处理程序也完成。
Blazor事件处理程序代码如下:
var task = InvokeAsync(EventMethod);
StateHasChanged();
if (!task.IsCompleted)
{
await task;
StateHasChanged();
}
如果EventMethod
只包含同步代码,则它运行到完成,并且StateHasChanged
被调用一次。如果EventMethod
返回一个正在运行的任务,则它在第一次屈服时调用StateHasChanged
,然后在完成时调用。
这篇关于如何确保Blazor渲染器识别集合更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文