diff --git a/src/BootstrapBlazor/Components/Checkbox/Checkbox.razor.cs b/src/BootstrapBlazor/Components/Checkbox/Checkbox.razor.cs index 528c7c7857c..548e5f96740 100644 --- a/src/BootstrapBlazor/Components/Checkbox/Checkbox.razor.cs +++ b/src/BootstrapBlazor/Components/Checkbox/Checkbox.razor.cs @@ -215,21 +215,23 @@ private async Task InternalStateChanged(CheckboxState state) if (IsBoolean) { CurrentValue = (TValue)(object)(state == CheckboxState.Checked); - } - if (State != state) - { - State = state; - if (StateChanged.HasDelegate) + if (ValueChanged.HasDelegate) { - await StateChanged.InvokeAsync(State); ret = false; } + } - if (OnStateChanged != null) - { - await OnStateChanged(State, Value); - } + State = state; + if (StateChanged.HasDelegate) + { + await StateChanged.InvokeAsync(State); + ret = false; + } + + if (OnStateChanged != null) + { + await OnStateChanged(State, Value); } return ret; } diff --git a/test/UnitTest/Components/CheckboxListTest.cs b/test/UnitTest/Components/CheckboxListTest.cs index 278ab948553..60f582fa2a5 100644 --- a/test/UnitTest/Components/CheckboxListTest.cs +++ b/test/UnitTest/Components/CheckboxListTest.cs @@ -94,6 +94,27 @@ public async Task Checkbox_OnTriggerClickAsync() Assert.Equal(CheckboxState.Checked, cut.Instance.State); } + [Fact] + public async Task Bool_TriggerStateChanged_Ok() + { + bool value = false; + // 测试 bool 值改变值时触发 StateChanged 回调方法 + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.Value, false); + pb.Add(a => a.OnStateChanged, (state, v) => + { + value = v; + return Task.CompletedTask; + }); + }); + + // JavaScript 调用 OnTriggerClickAsync 方法 + await cut.InvokeAsync(() => cut.Instance.OnTriggerClickAsync()); + Assert.Equal(CheckboxState.Checked, cut.Instance.State); + Assert.True(value); + } + [Fact] public void Checkbox_Dispose() {