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

MudBlazor MudSelect选择变更时触发哪个事件及如何实现?

MudSelect获取选中值的正确方式

问题原因

你用错了事件:

  • SelectedValuesChanged是多选模式(需设置MultiSelection="true")下才会触发的事件,单选场景不生效。
  • MudBlazor组件不支持原生@onchange,必须使用组件自身提供的事件或绑定方式。

解决方案

方式1:使用ValueChanged事件监听选中变化

直接给MudSelect绑定ValueChanged事件,选中值变化时会触发对应的处理方法:

<MudSelect T="Stage" Label="Stage" Variant="Variant.Filled" AnchorOrigin="Origin.BottomCenter"
           ValueChanged="HandleStageSelected">
    <MudSelectItem Value="@(new Stage("Stage 1"))" />
    <MudSelectItem Value="@(new Stage("Stage 2"))" />
    <MudSelectItem Value="@(new Stage("Stage 3"))" />
    <MudSelectItem Value="@(new Stage("Stage 4"))" />
    <MudSelectItem Value="@(new Stage("Stage 5"))" />
</MudSelect>

在@code块中添加处理方法:

public class Stage
{
    public Stage(string stageName)
    {
        StageName = stageName;
    }

    public readonly string StageName;

    public override bool Equals(object o)
    {
        var other = o as Stage;
        return other?.StageName == StageName;
    }

    public override int GetHashCode() => StageName?.GetHashCode() ?? 0;

    public override string ToString() => StageName;
}

private void HandleStageSelected(Stage selectedStage)
{
    // 在这里处理选中后的逻辑,比如获取选中的Stage对象
    Console.WriteLine($"当前选中:{selectedStage.StageName}");
}

方式2:使用双向绑定@bind-Value

通过双向绑定将选中值同步到变量,还可以在变量的setter中处理变化逻辑:

<MudSelect T="Stage" Label="Stage" Variant="Variant.Filled" AnchorOrigin="Origin.BottomCenter"
           @bind-Value="_currentStage">
    <MudSelectItem Value="@(new Stage("Stage 1"))" />
    <MudSelectItem Value="@(new Stage("Stage 2"))" />
    <MudSelectItem Value="@(new Stage("Stage 3"))" />
    <MudSelectItem Value="@(new Stage("Stage 4"))" />
    <MudSelectItem Value="@(new Stage("Stage 5"))" />
</MudSelect>

在@code块中添加变量及可选的逻辑处理:

public class Stage
{
    // 保持你原有的Stage类实现不变
    public Stage(string stageName)
    {
        StageName = stageName;
    }

    public readonly string StageName;

    public override bool Equals(object o)
    {
        var other = o as Stage;
        return other?.StageName == StageName;
    }

    public override int GetHashCode() => StageName?.GetHashCode() ?? 0;

    public override string ToString() => StageName;
}

// 双向绑定的变量
private Stage _currentStage;

// 若需要在值变化时自动执行逻辑,可手动封装属性
private Stage CurrentStage
{
    get => _currentStage;
    set
    {
        _currentStage = value;
        // 值变化时的处理逻辑
        if (_currentStage != null)
        {
            Console.WriteLine($"选中状态更新:{_currentStage.StageName}");
        }
    }
}
// 此时将@bind-Value改为@bind-Value="CurrentStage"即可

注意事项

你的Stage类已经正确重写了Equals和GetHashCode方法,这是MudSelect正确识别选中项的关键,无需修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:15:43