如何在值之后读取复选框的@onclick 事件

How to read a checkbox's @onclick event after the value

当我使用 @onclick 中的函数作为复选框并检查 @bind-Value 的输入时,返回值不同,看起来 @onclick 事件比 @bind 先执行-值

以身作则

<div>
    <MudCheckBox @bind-Checked="@testCheck" Color="Color.Secondary" @onclick="()=> ChecktestBox()"></MudCheckBox>
    <p>Value: @testCheck</p>
</div>

@code {
    private bool testCheck { get; set; } = false;
    
    private void ChecktestBox() {
        MessageBox.Show(testCheck.ToString());
        
        if(testCheck)
            ....
    }
}

结果是@onclick事件中添加的函数即使值为truereturnsfalse

并在消息中使用 Value: @testCheck returns 正确的值

我该怎么办,从正确的@testCheck

我不使用 MudCheckBox,但我可以说,在我的正常实践中,没有必要双向绑定到复选框的值或选中 属性。那是因为 onchange 事件值传递了 属性。如果值不是字符串,则必须强制转换 ChangeEventArgs 才能读取该值。

<input type="checkbox" @onchange="HandleCheck" />
@Message

@code {
    string Message;

    void HandleCheck(ChangeEventArgs arg)
    {
        bool IsChecked = (bool)arg.Value;
        Message = IsChecked ? "Use this value" : "Don't use this value";
    }
}

如果我想设置的 class 中有一个 bool 属性,我通常只会使用双向绑定。

假设 Mud CheckBox 已成功绑定到布尔值,那么您可以为其使用自定义 get; set;。但是,请小心处理它——您可能不想用它调用涉及的 async Task

<input type="checkbox" @bind="CheckTest"/>
@Message

@code {
    string Message;

    private bool _checkTest;
    bool CheckTest
    {
        get { return _checkTest; }
        set { _checkTest = value; HandleCheck(value);  }
    }

    void HandleCheck(bool IsChecked)
    {
        Message = IsChecked ? "Do something" : "Don't do the thing";
    }
}

不过,我觉得有点难以相信 Mud Checkbox 无法正确处理 @onchange