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

如何在MAUI Blazor中实现复选框与布尔值的双向绑定?

MAUI Blazor复选框与布尔值双向绑定修复方案

问题核心

你当前代码的问题在于:标记为[Parameter]的属性不能直接修改值来触发UI同步。Blazor中组件参数的双向绑定需要配套EventCallback来通知父组件更新值,否则修改参数属性不会触发UI刷新。


场景1:与父组件双向绑定(保留Parameter)

如果IsChecked需要和父组件进行数据同步,使用以下修正代码:

<input type="checkbox" @bind-value="IsChecked" @bind-value:after="CheckboxChanged">
<button @onclick="Toggle">Toggle</button>

@code
{
    [Parameter]
    public bool IsChecked { get; set; } = true;

    // 必须添加配套的EventCallback,用于通知父组件更新值
    [Parameter]
    public EventCallback<bool> IsCheckedChanged { get; set; }

    private async void CheckboxChanged()
    {
        // 通过回调通知父组件更新值
        await IsCheckedChanged.InvokeAsync(IsChecked);
        Console.WriteLine($"Checkbox changed {IsChecked}");
    }

    protected async void Toggle()
    {
        var newValue = !IsChecked;
        // 同样通过回调触发值更新,而非直接修改Parameter属性
        await IsCheckedChanged.InvokeAsync(newValue);
        Console.WriteLine($"--- Toggle: {newValue}");
    }
}

父组件使用时需写为:

<YourCheckboxComponent @bind-IsChecked="ParentIsCheckedVariable" />

场景2:组件内部独立维护状态(无需父组件交互)

如果IsChecked仅在当前组件内使用,不需要和父组件同步,直接去掉[Parameter],改用私有字段即可:

<input type="checkbox" @bind-value="_isChecked" @bind-value:after="CheckboxChanged">
<button @onclick="Toggle">Toggle</button>

@code
{
    private bool _isChecked = true;

    private void CheckboxChanged()
    {
        Console.WriteLine($"Checkbox changed {_isChecked}");
        // 这里可以添加写入存储的逻辑
    }

    protected void Toggle()
    {
        _isChecked = !_isChecked;
        Console.WriteLine($"--- Toggle: {_isChecked}");
        // 这里可以添加写入存储的逻辑
    }

    // 启动时读取存储的示例逻辑
    protected override async Task OnInitializedAsync()
    {
        // 示例:从MAUI Preferences读取存储值
        // _isChecked = await Preferences.GetAsync("IsChecked", true);
        await base.OnInitializedAsync();
    }
}

内容的提问来源于stack exchange,提问作者Konrad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:33:20