MudSelect无法绑定默认值:如何将默认值与模型绑定?
MudSelect默认值绑定问题解决方案
核心问题
MudSelect对引用类型(比如你的ModelName)默认使用引用相等性判断,你的defaultValue是新创建的实例,和LoadNames里生成的MudSelectItem中的ModelName实例不是同一个引用,所以组件无法匹配到默认选项。
解决步骤
1. 修复对象相等性判断
有两种方式实现正确的相等判断:
方式一:重写ModelName的Equals和GetHashCode
在ModelName类中添加以下代码,基于唯一标识scid来判断对象相等:
public class ModelName { public int scid { get; set; } public string name { get; set; } public override bool Equals(object obj) { return obj is ModelName model && scid == model.scid; } public override int GetHashCode() { return HashCode.Combine(scid); } }
方式二:给MudSelect指定ValueComparer
如果不想修改ModelName类,可以直接在MudSelect上指定自定义比较器:
<MudSelect T="ModelName" Label="Select Name" @bind-Value="defaultValue" ValueComparer="@(EqualityComparer<ModelName>.Create((x,y) => x.scid == y.scid, obj => obj.scid.GetHashCode()))"> @foreach (var item in LoadNames) { <MudSelectItem Value="@(new ModelName{ scid = item.scid, name= item.name })">@item.name</MudSelectItem> } </MudSelect>
2. 完成默认值绑定
直接将@bind-Value绑定到你定义的defaultValue即可:
<MudSelect T="ModelName" Label="Select Name" @bind-Value="defaultValue"> @foreach (var item in LoadNames) { <MudSelectItem Value="@(new ModelName{ scid = item.scid, name= item.name })">@item.name</MudSelectItem> } </MudSelect>
注意事项
确保LoadNames集合中存在scid=101的项,否则组件无法找到对应的选项,默认值也无法显示。
内容的提问来源于stack exchange,提问作者amanpreet
相关产品推荐
相关产品推荐

