绑定复选框并在该复选框更改时触发事件的正确方法是什么?我尝试了几种不同的方法,但都没有完全按照我的希望工作。请注意,该复选框位于组件中。
<input type="checkbox" checked="@IsChecked" @onchange="CheckboxChanged">
@code{
[Parameter]
public bool IsChecked { get; set; } = true;
private void CheckboxChanged()
{
Console.WriteLine($"Checkbox changed {IsChecked}");
}
}
当页面加载时,它会读取赋予的值IsChecked
,当 CheckBox 被选中时,该方法将被触发。然而,值IsChecked
没有更新。那么如果绑定值为IsChecked
在组件外部更改时,该方法不会触发,但值IsChecked
已更改(应注意 UI 已正确更新)。
我想我需要一个像这样的实际绑定:
<input type="checkbox" @bind="IsChecked" @onchange="CheckboxChanged" >
但是,这会产生一个错误onchange
使用两个或多个
<input type="checkbox" @bind="IsChecked" @onclick="CheckboxChanged" >
然而,当用户单击该复选框时,它确实会触发该方法,IsChecked
是旧值(我假设点击发生在绑定之前)。那么如果值为IsChecked
在组件外部发生更改,该方法再次不会触发。
正确的方法是什么?
您的代码/组件有两个问题:
- 你不应该修改
[Parameters]
在你的代码中。每当组件更新时都会设置这些。
- 绑定使用
OnChanged
要更新的事件isChecked
,所以你也不能使用它。
这是有效的注释代码。
- 使用内部字段来保存复选框状态。
- 连线了
OnInput
event.
@page "/"
<input type="checkbox" checked="@isChecked" @oninput="CheckboxChanged">
@code{
[Parameter]
public bool IsChecked { get; set; } = true;
// Internal field holding checkbox state
private bool isChecked;
// updates the internal value whwenever the component is updated
// You may not want that??
protected override void OnParametersSet()
{
isChecked = this.IsChecked;
}
private void CheckboxChanged(ChangeEventArgs e)
{
// get the checkbox state
var value = e.Value;
Console.WriteLine($"Checkbox changed {IsChecked}");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)