Динамически привязывающий шаблон поля ввода

#c# #blazor #blazor-webassembly

#c# #blazor #blazor-webassembly

Вопрос:

Я пытаюсь создать динамический список полей ввода, в то время как я выбираю элементы из выпадающего списка с несколькими вариантами выбора. итак, как динамически привязать переменную к созданным текстовым полям, привязанным к идентификатору, выбранному из выпадающего списка с несколькими вариантами выбора.

это то, что я сделал .

 <MudGrid>
   <MudItem xs="12" md="12">
        <MudSelect T="Parts" Label="US States" HelperText="Pick your favorite states" MultiSelection="true" @bind-Value="value" @bind-SelectedValues="options">
            @foreach (var part in parts)
            {
                <MudSelectItem T="Parts" Value="@part">@part.PartsValue</MudSelectItem>
            }
        </MudSelect>
    </MudItem>
    @foreach (Parts item in options)
    {
        int i = 0;
        <MudItem xs="3" sm="3" md="2">
            <MudTextField  @bind-Value="@xxxxx" Label="@item.PartsValue" Variant="Variant.Outlined" Margin="Margin.Dense"></MudTextField>
        </MudItem>
        i  ;
    }
</MudGrid>
 

Комментарии:

1. Мне нравится, как вы создаете int i=0 каждый раз, когда запускаете новый цикл, увеличиваете его в конце цикла, а затем выбрасываете. 😉 Но в любом случае: в чем вопрос?

Ответ №1:

Я заставил ваш код работать и создал скрипку, которая позволяет выполнять его онлайн: https://try.mudblazor.com/snippet/wYwFvcPUxSdgXHbW

 <MudGrid>
   <MudItem xs="12" md="12">
        <MudSelect T="Part" MultiSelection="true" @bind-SelectedValues="options">
            @foreach (var part in parts)
            {
                <MudSelectItem T="Part" Value="@part">@part.PartValue</MudSelectItem>
            }
        </MudSelect>
    </MudItem>
    @foreach (var part in options)
    {
        <MudItem xs="3" sm="3" md="2">
            <MudTextField  @bind-Value="@part.PartValue" Label="Edit part" Variant="Variant.Outlined" Margin="Margin.Dense"></MudTextField>
        </MudItem>
    }
</MudGrid>

@code
{


    IEnumerable<Part> parts = new List<Part>()
    {
        new Part() {PartID = 1, PartValue = "Part 1"},
        new Part() {PartID = 2, PartValue = "Part 2"},
        new Part() {PartID = 3, PartValue = "Part 3"},
    };
    private IEnumerable<Part> options { get; set; } = new HashSet<Part>() { 
        new Part() {PartID = 3, PartValue = "Part 3"},
    };

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