如何让MudSelect多选时显示选项文本而非值?
MudSelect多选显示自定义文本的解决方法
方法一:用SelectedValuesTextFunc自定义显示文本(无需修改现有ViewModel属性)
直接给MudSelect添加SelectedValuesTextFunc属性,指定一个方法来把选中的Id集合转换成对应的显示文本:
<MudSelect MultiSelection="true" @bind-SelectedValues="ViewModel.Model.GlobalSalaryAccessUserIds" SelectedValuesTextFunc="@GetSelectedDisplayText"> @foreach (var salaryAccessUser in ViewModel.GlobalSalaryAccessUsers) { <MudSelectItem Value="@salaryAccessUser.Id">@GenerateSalaryAccessUserDisplayString(salaryAccessUser)</MudSelectItem> } </MudSelect>
然后在组件的代码部分添加对应的处理方法(注意根据你的Id实际类型调整Cast的类型,比如Id是string就改成Cast<string>):
private string GetSelectedDisplayText(IEnumerable<object> selectedIds) { var selectedUserIds = selectedIds.Cast<int>(); var selectedUsers = ViewModel.GlobalSalaryAccessUsers.Where(u => selectedUserIds.Contains(u.Id)); return string.Join(", ", selectedUsers.Select(u => GenerateSalaryAccessUserDisplayString(u))); }
这个方法会根据选中的Id匹配到对应的用户,再调用你已有的GenerateSalaryAccessUserDisplayString生成文本,最后用逗号拼接成多选后的显示内容。
方法二:绑定实体对象而非Id(需调整ViewModel属性)
如果允许修改ViewModel里的属性类型,把GlobalSalaryAccessUserIds改成存储用户实体的集合(比如IEnumerable<SalaryAccessUser>),可以用ToStringFunc来指定对象的显示文本:
<MudSelect MultiSelection="true" @bind-SelectedValues="ViewModel.Model.GlobalSalaryAccessUsersSelected" ToStringFunc="@(user => GenerateSalaryAccessUserDisplayString(user as SalaryAccessUser))"> @foreach (var salaryAccessUser in ViewModel.GlobalSalaryAccessUsers) { <MudSelectItem Value="@salaryAccessUser">@GenerateSalaryAccessUserDisplayString(salaryAccessUser)</MudSelectItem> } </MudSelect>
这种方式下,组件会直接用ToStringFunc返回的文本作为选中项的显示内容,不需要额外处理Id转换。
内容的提问来源于stack exchange,提问作者Atlass-
相关产品推荐
相关产品推荐

