【问题标题】:Blazor, select an item in for loop of components and deselect the othersBlazor,在组件循环中选择一个项目并取消选择其他项目
【发布时间】:2021-12-14 07:28:02
【问题描述】:

在 Blazor Webassembly 版本 5 中:

我有一个for 循环,它遍历数据项以显示它们,用户应该能够通过单击来选择这些项目。实现这一目标的最佳方法是什么? 我想选择选定的PersonItem,但取消选择其他组件。问题在于取消选择其他人。

PersonItem.Razor:

@if (Person!= null)
{
    <div @onclick="InvokeOnClick" style="@GetStyle()">@Person.Name</div>
}
@code {


    [Parameter] public PersonPerson { get; set; } = null;
    [Parameter] public bool IsSelected { get; set; }=false;
    [Parameter] public EventCallback<Person> OnClick { get; set; }
    private string GetStyle() => IsSelected ? "cursor:default;color:blue" : "cursor:pointer";

    protected override Task OnParametersSetAsync()
    {
        StateHasChanged();
        return base.OnParametersSetAsync();
    }

    private async Task InvokeOnClick()
    {
      IsSelected = true;
      await OnClick.InvokeAsync(Person);
    }
}

MyPage.razor:

@inject IPersonRepo personRepo;



@if (PersonList !)
{
    foreach (var person in PersonList)
    {
        <PersonItem Person="@person"></PersonItem>
    }
}
else
{
    <div>Not Yet!</div>
}


@code {
    public List<Person>? PersonList { get; set; } = null;

    protected async override Task OnInitializedAsync()
    {
        await GetAllPersons(null);
        await base.OnInitializedAsync();
    }


    public async Task GetAllPersons(EventArgs e)
    {
        PersonList = await personRepo.GetAllPersons();
    }
}

【问题讨论】:

  • 简而言之,你想实现 Radio Button 样式的行为吗?
  • 那么,一瞬间只能选择一个人?这就是麻烦吗?
  • @CaiusJard 这可能是真的。
  • @Alamakanambra 是的,一个人被选中,但我希望其他人未被选中。一次只能选择一个人
  • 如果您查看提供这些(Blazorise、MudBlazor 等的源代码)类型按钮的框架,它们通常存在于另一个容器中,该容器提供同一组中其他按钮的聚合/知识(因此每页可以有多个组)并且实际上是容器的工作来取消选择其他组。也就是说,如果您将其连接起来,以便每个按钮绑定到相同的数据存储变量并设置自己的不同,例如枚举值,那么只有当后备存储变量值等于它设置的值时,它才必须绘制自己。

标签: c# asp.net-core blazor blazor-webassembly


【解决方案1】:

您已经拥有了大部分成分。 使用 OnCLick 和 IsSelected 时满足要求:

foreach (var person in PersonList)
{
    <PersonItem Person="@person" 
           OnClick="SelectPerson" 
           IsSelected="person==selectedPerson" />
}

在@code中:

   
Person selectedPerson = null;

void SelectPerson(Person person)
{
   selectedPerson = person;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 2019-02-26
  • 2020-05-06
相关资源
最近更新 更多