Blazor,select for 组件循环中的一个项目和 deselect 其他组件
Blazor, select an item in for loop of components and deselect the others
在 Blazor Webassembly 版本 5 中:
我有一个 for
循环,它遍历数据项以显示它们,用户应该能够通过单击来 select 项目。实现这一目标的最佳方法是什么?
我想 select selected PersonItem
但 deselect 其他组件。问题是 deselecting 其他人。
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();
}
}
你已经准备好了大部分的原料。
使用 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;
}
在 Blazor Webassembly 版本 5 中:
我有一个 for
循环,它遍历数据项以显示它们,用户应该能够通过单击来 select 项目。实现这一目标的最佳方法是什么?
我想 select selected PersonItem
但 deselect 其他组件。问题是 deselecting 其他人。
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();
}
}
你已经准备好了大部分的原料。 使用 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;
}