使用MudCheckBox时@bind-Checked与CheckedChanged冲突报错的解决办法
解决MudCheckBox的CheckedChanged重复绑定错误
错误原因
- 参数重复冲突:
@bind-Checked是Blazor双向绑定语法,会自动生成Checked和CheckedChanged两个组件参数,手动添加CheckedChanged会导致参数重复,触发RZ10010错误。 - 事件回调格式错误:直接写
RolSelected(rol.Id.Value)会立即执行方法,而非绑定事件回调;同时原方法返回void,不符合EventCallback<bool>的参数要求,触发CS1503错误。
解决方案
方案一:手动处理绑定逻辑,移除@bind-Checked
放弃双向绑定语法,手动指定Checked值,并在CheckedChanged中同时更新状态和执行业务逻辑:
@foreach (var rol in Rollenlist) { <MudCheckBox Checked="@rol.IsSelected" Label="@rol.Name" LabelPosition="LabelPosition.Start" Color="Color.Primary" Size="MudBlazor.Size.Large" CheckedChanged="(bool isChecked) => RolSelected(rol.Id.Value, isChecked)"> </MudCheckBox> }
修改RolSelected方法,接收选中状态并更新对象属性:
void RolSelected(int id, bool isChecked) { // 先更新当前角色的选中状态 var targetRole = Rollenlist.FirstOrDefault(r => r.Id.Value == id); if (targetRole != null) { targetRole.IsSelected = isChecked; } // 原来的业务逻辑... }
方案二:保留双向绑定,改用OnClick事件
沿用原InputCheckbox的思路,用OnClick事件处理业务逻辑,@bind-Checked自动维护选中状态:
@foreach (var rol in Rollenlist) { <MudCheckBox @bind-Checked="@rol.IsSelected" Label="@rol.Name" LabelPosition="LabelPosition.Start" Color="Color.Primary" Size="MudBlazor.Size.Large" OnClick="(() => RolSelected(rol.Id.Value))"> </MudCheckBox> }
此方案无需修改原RolSelected方法,@bind-Checked会自动同步rol.IsSelected的值,OnClick仅触发额外业务逻辑。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

