Xap*_*ann 14 c# blazor blazor-server-side
绑定复选框并在该复选框更改时触发事件的正确方法是什么?我尝试了几种不同的方法,但都没有完全按照我的希望工作。请注意,该复选框位于组件中。
<input type="checkbox" checked="@IsChecked" @onchange="CheckboxChanged">
@code{
[Parameter]
public bool IsChecked { get; set; } = true;
private void CheckboxChanged()
{
Console.WriteLine($"Checkbox changed {IsChecked}");
}
}
Run Code Online (Sandbox Code Playgroud)
当页面加载时,它会读取赋予 的值IsChecked,并且当选中 CheckBox 时,会触发该方法。但是, 的值IsChecked并未更新。然后,如果 的绑定值IsChecked在组件外部更改,则该方法不会触发,但 的值IsChecked会更改(应注意 UI 已正确更新)。
我想我需要一个像这样的实际绑定:
<input type="checkbox" @bind="IsChecked" @onchange="CheckboxChanged" >
Run Code Online (Sandbox Code Playgroud)
但是,这会产生onchange使用两个或多个
<input type="checkbox" @bind="IsChecked" @onclick="CheckboxChanged" >
Run Code Online (Sandbox Code Playgroud)
当用户单击该复选框时,它确实会触发该方法,但是IsChecked处于旧值(我假设单击发生在绑定之前)。然后,如果 的值IsChecked在组件外部发生更改,该方法将再次不会触发。
正确的方法是什么?
MrC*_*tis 26
您的代码/组件有两个问题:
[Parameters]在代码中进行修改。每当组件更新时都会设置这些。OnChanged事件来更新isChecked,所以你不能同时使用它。这是有效的注释代码。
OnInput活动。@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}");
}
}
Run Code Online (Sandbox Code Playgroud)
ary*_*yeh 13
从 .NET 7 开始,您可以@bind-value:after在更改事件发生后使用它来进行处理。
<input type="checkbox" @bind-value="@IsChecked" @bind-value:after="CheckboxChanged">
@code{
[Parameter]
public bool IsChecked { get; set; } = true;
private void CheckboxChanged()
{
Console.WriteLine($"Checkbox changed {IsChecked}");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33730 次 |
| 最近记录: |