Попробуйте следующий код ... Примечание: я внес некоторые изменения не потому, что они являются причиной проблемы, и т. Д. c. Я просто не могу не иметь свой собственный стиль. Тем не менее, вы должны сосредоточиться на том, как вы привязываетесь к элементам. Обратите внимание, что достаточно привязать атрибут checked флажка следующим образом: checked="@row.Selected"
. Я надеюсь, что вы искали такое решение ...
<table class="table table-hover">
<thead>
<tr>
<th>Select</th>
<th>Number</th>
<th>Text</th>
</tr>
</thead>
<tbody>
@foreach (var row in rows)
{
<tr @onclick="@(() => row.Selected = !row.Selected)">
<td><input type="checkbox" checked="@row.Selected" /></td>
<td>@row.Number</td>
<td>@row.Text</td>
</tr>
}
</tbody>
</table>
@code
{
List<Row> rows = Enumerable.Range(1, 10).Select(i => new Row { Selected =
false, Number = i, Text = $"Item {i}" }).ToList();
private class Row
{
public bool Selected { get; set; }
public int Number { get; set; }
public string Text { get; set; }
}
}
Я предполагал, что мне нужно использовать @bind, но я все еще не уверен, почему я могу ' t
Обычно вы можете использовать директиву @bind для создания двусторонней привязки данных между элементом Html и источником данных. Но в этом случае достаточно односторонней привязки данных, от источника данных до флажка, поскольку лямбда-выражение, запускаемое действием click элемента tr, переключает логическое свойство row.Selected. Следовательно, компонент повторно визуализируется, и флажок либо отмечен, либо не отмечен. в зависимости от предыдущего состояния.
Примечание: директива @bind при обработке компилятором создает два атрибута, которые ДОЛЖНЫ быть эквивалентны чему-то подобному, если вы примените директиву к флажку:
<td><input type="checkbox" checked="@row.Selected" @onchange="@((args) => row.Selected = (bool) args.Value)" /></td>
Если вы используете этот код вместо приведенного выше, ваше приложение все равно будет работать нормально, но, как вы уже поняли, событие изменения, вызванное для флажка, является излишним.
Но, вот и вот, если вы используете директиву @bind, позволяющую компилятору действовать от вашего имени, ваш код потерпит неудачу. Полагаю, это не сообщаемая ошибка.
Я надеюсь, что не усложнил ситуацию, добавив вышеуказанное дополнение ...
Надеюсь, это поможет ...