为什么复选框仍可以检查?
@if (@GearTypeView.PickN > 1)
{
@foreach (GearView gearView in GearTypeView.GearViews)
{
<div class="row">
<div class="col m-1">
<input type="checkbox"
checked="@IsChecked(gearView.GearId)"
@onchange="(ChangeEventArgs args) => { OnGearChanged(args, gearView.GearId); }" />
@gearView.GearDescription
</div>
</div>
}
}
@code {
[Parameter]
public GearTypeView GearTypeView { get; set; } = new();
private List<int> selectedGearIds = new();
private void OnGearChanged(ChangeEventArgs args, int gearId)
{
bool isChecked = (Boolean)args.Value;
if (isChecked &&
!selectedGearIds.Contains(gearId) &&
selectedGearIds.Count < GearTypeView.PickN)
{
selectedGearIds.Add(gearId);
}
else if (!isChecked && selectedGearIds.Contains(gearId))
{
selectedGearIds.Remove(gearId);
}
}
private bool IsChecked(int gearId)
{
bool isChecked = selectedGearIds.Contains(gearId);
return isChecked;
}
}
当我在ongearchanged()结束时放置一个断点时,已适当更新了检查复选框的列表,包括不允许超过最大值(称为pickn)。 当我在Ischecked()的末尾放置断点时,评估将返回预期的true/false。 &每次单击复选框时,都会调用()。 我尝试将statehaschanged()添加到ongearchanged()的末尾,但表现出同样的意外行为。
提前感谢!
由于不能自动触发绑定,您可以使用
@IsChecked
和
@bind
,例如以下内容:
@bind:after