Checkbox Blazor,复选框保持选中,调用StateHasChanged()方法后的事件

Checkbox Blazor,复选框保持选中,调用StateHasChanged()方法后的事件,checkbox,data-binding,blazor,blazor-server-side,Checkbox,Data Binding,Blazor,Blazor Server Side,我有以下代码: @foreach (var item in list) { <input type="checkbox" @onchange="@(e => HandleCheckChanged(e, item.Name))" checked="@item.IsChecked"> } private async Task HandleCheckChanged(ChangeEventArgs e, string itemName) { // do something .

我有以下代码:

@foreach (var item in list)
{
 <input type="checkbox" @onchange="@(e => HandleCheckChanged(e, item.Name))" checked="@item.IsChecked">
}

private async Task HandleCheckChanged(ChangeEventArgs e, string itemName)
{
   // do something ...
   StateHasChanged();
}
@foreach(列表中的变量项)
{
}
私有异步任务HandleCheckChanged(ChangeEventArgs e,string itemName)
{
//做点什么。。。
StateHasChanged();
}
如果我选中一个复选框,它将调用HandleCheckChanged,并且选中复选框
但如果我更改列表项,则“预览已选中”复选框仍处于选中状态,并且不会根据新列表项进行更新。

例如,假设我有一个有序数字列表{1-20},我遵循以下步骤:
1:list=GetAll(),其中(c=>c.Id<10)
2:我选中第一个复选框(数字1)
3:list=GetAll(),其中(c=>c.Id>=10);(列表已更新,状态已更改)

4:这里出现问题,复选框11是否选中???但是它的值为false

这是因为渲染器只看到“相同”的复选框列表,没有理由发送更新

使用
@key
表示它们是不同项目的简单解决方案:

@foreach (var item in list)
{
 <input @key="item" type="checkbox" @onchange="@(e => HandleCheckChanged(e, item.Name))" checked="@item.IsChecked">
}
@foreach(列表中的变量项)
{
}

您不必调用StatehasChanged(),但它也不会造成任何伤害。

之所以会发生这种情况,是因为渲染器只看到“相同”的复选框列表,而没有理由发送更新

使用
@key
表示它们是不同项目的简单解决方案:

@foreach (var item in list)
{
 <input @key="item" type="checkbox" @onchange="@(e => HandleCheckChanged(e, item.Name))" checked="@item.IsChecked">
}
@foreach(列表中的变量项)
{
}
您不必调用StatehasChanged(),但它也不会造成任何伤害