【发布时间】: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