Blazor中自定义SfGrid如何监听GridEvents.OnActionBegin事件
在自定义Syncfusion SfGrid中处理OnActionBegin事件的正确方式
你的问题出在错误地使用了传统.NET事件的+=语法来绑定Blazor的EventCallback类型事件。Syncfusion Blazor Grid的OnActionBegin是EventCallback<ActionEventArgs<T>>类型,不能通过+=添加处理逻辑,需要通过以下方式实现:
方法1:重写OnActionBegin参数并合并自定义逻辑
这种方式既保留组件使用者传入的OnActionBegin回调,又能执行自定义代码:
public class CustomGrid<T> : SfGrid<T> { // 重写基类的OnActionBegin参数 [Parameter] public new EventCallback<ActionEventArgs<T>> OnActionBegin { get; set; } protected override async Task OnInitializedAsync() { var originalUserCallback = OnActionBegin; // 创建新的EventCallback,合并自定义逻辑与用户传入的回调 OnActionBegin = EventCallback.Factory.Create<ActionEventArgs<T>>(this, async args => { // 执行你的自定义逻辑 if (args.RequestType == Syncfusion.Blazor.Grids.Action.Sorting) { Console.WriteLine("Sorting triggered in CustomGrid"); } // 执行用户传入的原始回调(如果有的话) if (originalUserCallback.HasDelegate) { await originalUserCallback.InvokeAsync(args); } }); await base.OnInitializedAsync(); } }
方法2:直接绑定自定义处理方法(忽略用户传入的回调)
如果不需要兼容使用者传入的OnActionBegin回调,可以直接赋值为自定义处理方法:
public class CustomGrid<T> : SfGrid<T> { protected override async Task OnInitializedAsync() { OnActionBegin = EventCallback.Factory.Create<ActionEventArgs<T>>(this, CustomActionHandler); await base.OnInitializedAsync(); } private async Task CustomActionHandler(ActionEventArgs<T> args) { if (args.RequestType == Syncfusion.Blazor.Grids.Action.Sorting) { Console.WriteLine("Sorting"); } } }
关键说明
- Blazor的
EventCallback是专为组件交互设计的类型,不是传统的委托事件,因此不能使用+=/-=操作符 - 重写参数时需要使用
new关键字,覆盖基类已定义的OnActionBegin参数 - 推荐使用方法1,保证组件的扩展性,允许使用者额外添加自己的事件逻辑
内容的提问来源于stack exchange,提问作者Mehdiway
相关产品推荐
相关产品推荐

