You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor绑定类列表到输入时自定义Checkbox死循环及set访问器不触发问题

Blazor绑定问题原因与解决方案

问题1:checkboxes属性set访问器不触发

  • 原因:你修改的是List<CheckboxModel>内部元素的isSelected属性,没有替换checkboxes对应的整个List实例引用,只有当你给checkboxes直接赋值新的List对象时,set访问器才会执行。
  • 解决方案:如果需要监听选中项变更,可选择以下两种方式:
    1. 给CheckboxModel实现INotifyPropertyChanged接口,监听isSelected属性的变更事件
    2. 绑定选中变更事件,每次选中状态变化时手动执行你原本写在set里的逻辑

问题2:自定义Checkbox组件死循环+数据不更新

  • 原因:自定义Checkbox的参数逻辑不符合Blazor双向绑定规范:
    1. isSelected参数的setter里没有给私有字段_isSelected赋值,导致组件内部存储的选中状态永远不会更新,界面自然无变化
    2. 只要父组件给isSelected参数赋值,setter就直接触发isSelectedChanged回调,父组件收到回调后更新绑定源,触发重渲染,再次给子组件isSelected赋值,形成无限循环
  • 修复后的Checkbox.razor代码:
<div class="checkbox">
    <input type="checkbox" id="@id" @bind="@IsSelected" />
    <label for="@id">@label</label>
</div>
@code {
    [Parameter]
    public string id { get; set; }

    [Parameter]
    public string label { get; set; }

    private bool _isSelected;
    [Parameter]
    public bool IsSelected
    {
        get => _isSelected;
        set
        {
            if (_isSelected != value)
            {
                _isSelected = value;
                isSelectedChanged.InvokeAsync(value);
            }
        }
    }

    [Parameter]
    public EventCallback<bool> isSelectedChanged { get; set; }
}

内容的提问来源于stack exchange,提问作者j.xiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:45:04