Blazor MudSelect @bind-SelectedValues 到 id 和 value

use*_*546 6 c# blazor blazor-webassembly

我需要知道所选项目的 ID 和值。如下例所示。所以选项应该有一系列选定的部分。

<MudGrid>
    <MudItem xs="6" sm="6" md="4">
        @*  <MudSelect T="string" Label="Parts" Strict="true" MultiSelection="true" Variant="Variant.Outlined" @bind-Value="value" @bind-SelectedValues="options" Margin="Margin.Dense" Required="true" Format="F2">*@
        <MudSelect T="string" Label="Parts " HelperText="Pick the Parts" MultiSelection="true" @bind-SelectedValues="options">
            @foreach (var part in parts)
            {
                <MudSelectItem T="string" Value=@part.PartValue>@part.PartValue</MudSelectItem>

            }
        </MudSelect>
    </MudItem>
</MudGrid>

@code {

    IEnumerable<Parts> parts = new List<Parts>()
    {
        new Parts() {PartID = 1, PartValue = "Audi"},
        new Parts() {PartID = 2, PartValue = "BMW"},
        new Parts() {PartID = 3, PartValue = "Chevrolet"},
        new Parts() {PartID = 4, PartValue = "Ferrari"},
        new Parts() {PartID = 5, PartValue = "Porsche"},
        new Parts() {PartID = 6, PartValue = "Renault"}
    };
    private int value { get; set; } = 0;
    private HashSet<int> options { get; set; } = new HashSet<int>() { 0 };

    public class Parts
    {
        public int PartID { get; set; }
        public string PartValue { get; set; }
    }
} 
Run Code Online (Sandbox Code Playgroud)

hen*_*non 6

在这里,您可以只使用 MudSelect 中的零件,但必须在零件中提供合适的覆盖以允许相等比较。这是经过更改的代码片段。您可以在线玩它:https ://try.mudblazor.com/snippet/wEwFFQPUdcDWgbYs

代码:

<MudGrid>
    <MudItem xs="12">
        <MudSelect Label="Parts " HelperText="Pick the Parts" MultiSelection="true" @bind-SelectedValues="options">
            @foreach (var part in parts)
            {
                <MudSelectItem Value="@part">@part.PartValue</MudSelectItem>
            }
        </MudSelect>
    </MudItem>
    <MudItem xs="12">
        <br/><br/>
        Selected parts: @string.Join(", ", options.Select(x=>x.PartValue));
    </MudItem>
</MudGrid>

@code {

    IEnumerable<Parts> parts = new List<Parts>()
    {
        new Parts() {PartID = 1, PartValue = "Audi"},
        new Parts() {PartID = 2, PartValue = "BMW"},
        new Parts() {PartID = 3, PartValue = "Chevrolet"},
        new Parts() {PartID = 4, PartValue = "Ferrari"},
        new Parts() {PartID = 5, PartValue = "Porsche"},
        new Parts() {PartID = 6, PartValue = "Renault"}
    };
    private IEnumerable<Parts> options { get; set; } = new HashSet<Parts>() { 
        new Parts() {PartID = 2, PartValue = "BMW"},
        new Parts() {PartID = 4, PartValue = "Ferrari"},
    };

    public class Parts
    {
        public int PartID { get; set; }
        public string PartValue { get; set; }
        public override bool Equals(object o) {
            var other = o as Parts;
            return other?.PartID==PartID;
        }
        public override int GetHashCode() => PartID.GetHashCode();        
        public override string ToString() {
            return PartValue;
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)