Blazor中Action替代Lambda后UI不更新,如何改用Func/EventCallback?
Blazor网格异步点击事件UI不更新问题
我正在开发Blazor项目,其中部分网格包含大量行列。考虑到Lambda函数开销较高,按照微软文档建议改用Action实现点击事件。
在Cell类中添加属性:
public Action<MouseEventArgs> Action { get; set; } = (e) => { };
设置单元格时赋值:
someRow.FixedCells[0].Action = (e) => { SwapIngredientRows(someRow, false); };
此前的Razor代码为:
@onclick="@(() => SwapIngredientRows(row, false))"
SwapIngredientRows是异步方法,内部包含2个await调用且会更新UI。但改为@onclick="cell.Action"后,数据库更新正常,UI却未同步更新。想了解是否可以将Action改为Func或EventCallback,使其行为与原Lambda一致?
优化方案(基于@hank-holterman的方案调整)
因需要获取点击时Control键的状态,调整后的属性改为:
public Func<MouseEventArgs, Task> Action { get; set; }
使用方式如下:
Action = (e) => ProcessClick(e, my, other, properties)
其中e为MouseEventArgs;若无需该参数,直接不传入即可:
Action = (e) => DumbClick(my, other, properties)
Razor语法无需修改,保持:
@onclick="cell.Action"
内容的提问来源于stack exchange,提问作者Grandizer
相关产品推荐
相关产品推荐

