如何使用 MultiSelection="true" 让默认值出现在 MudBlazor MudSelect 中?

Posted

技术标签:

【中文标题】如何使用 MultiSelection="true" 让默认值出现在 MudBlazor MudSelect 中?【英文标题】:How do I get default values to appear in MudBlazor MudSelect with MultiSelection="true"? 【发布时间】:2021-06-26 14:41:43 【问题描述】:

我正在使用 MudBlazor 创建一个组件来选择 MudSelect 中的多个项目。当我预填充值时,它们不会出现在选择控件中。当控件展开时,正确的项目被指示为选中。如果我修改他们确实显示的选择。如果我关闭扩展而不进行更改,它们不会。

我需要它们显示在初始状态。

视频:https://share.clickup.com/clip/p/t1280802/25e76e23-189d-4696-a795-8640b31a798f/screen-recording-2021-03-30-09%3A52.webm

我这里有一个代码演示:https://try.mudblazor.com/snippet/mEmPkHHkpwkPNrkt

__Main.razor:

@using BlazorRepl.UserComponents

<MyComponent Config="MyLocations" 
    OnConfigChanged="LocationsChanged"></MyComponent>

@code 
    private List<Location> MyLocations;
    private List<Location> ModifiedLocations;

    protected override async Task OnInitializedAsync()
    
        await base.OnInitializedAsync();
        MyLocations = new List<Location>() Location.inside, Location.underwater;
    

    private void LocationsChanged(List<Location> val)
    
        ModifiedLocations = val;
    

MyComponent.razor:

@using BlazorRepl.UserComponents

<MudPaper Elevation="3">
    <MudSelect Label="Locations" SelectedValues="new HashSet<Location>(Config)"
        T="Location" MultiSelection="true" >
        @foreach (Location val in Enum.GetValues(typeof(Location)))
        
            <MudSelectItem Value="val" />
        
    </MudSelect>
</MudPaper>

@code 
    [Parameter] public List<Location> Config get; set;
    [Parameter] public EventCallback<List<Location>> OnConfigChanged get; set;

    private void SelectedValuesChanged(HashSet<Location> val) 
        var v = new List<Location>(val);
        if (!Utilities.EnumListEquals(v, Config))
        
            Config = v;
            OnConfigChanged.InvokeAsync(Config);
                
    

stuff.cs:

namespace BlazorRepl.UserComponents

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    public static class Utilities 
        public static bool EnumListEquals<T>(List<T> one, List<T> two) where T : struct, IConvertible
        
            if (!typeof(T).IsEnum)
            
                throw new ArgumentException("T must be an enumerated type");
            
            return (one.Count() == two.Count() &&
                    one.Count(two.Contains) == two.Count());
        
    

    public enum Location  inside, outside, underwater 

【问题讨论】:

【参考方案1】:

这是 MudBlazor 中的一个错误。它将在下一个版本 MudBlazor v5.0.8 中修复

【讨论】:

它似乎还没有修复。 是的。检查上面的泥巴try.mudblazor.com/snippet/mEmPkHHkpwkPNrkt 我需要的略有不同:try.mudblazor.com/snippet/wYwbYfPVgbqxKidu

以上是关于如何使用 MultiSelection="true" 让默认值出现在 MudBlazor MudSelect 中?的主要内容,如果未能解决你的问题,请参考以下文章

html CheckBox MultiSelection - 复杂的JS工作(具有3级权限).html

如何从QTableView的选定行获取值?

pyqt:向用户显示 QListWidget 中存在的所有值

如何正确使用 Composer 安装 Laravel 扩展包

如何正确使用 Composer 安装 Laravel 扩展包

如何正确使用 Composer 安装 Laravel 扩展包