Blazor:Razor组件@bind-

Blazor:Razor组件@bind-,razor,blazor,Razor,Blazor,.NET 5/Blazor/VS 2019 你如何处理@bind-这个什么都不做的东西 例如: <Switch TValue="bool" @bind-Check="@IsFoo"></Switch> 或 IsFoo总是错误的 没有编译器错误或警告,运行时结果为foo=False 使用BlazorMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilation无法工作。还有其他想法吗?要实现

.NET 5/Blazor/VS 2019

你如何处理@bind-这个什么都不做的东西

例如:

<Switch TValue="bool" @bind-Check="@IsFoo"></Switch>

IsFoo总是错误的

没有编译器错误或警告,运行时结果为foo=False


使用BlazorMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilation无法工作。还有其他想法吗?

要实现双向绑定,您必须使用
EventCallback
。回调的名称应与绑定参数匹配,并附加
Changed

在本例中,我使用
Value
ValueChanged

Switch.razor

<div class="custom-control custom-switch">
    <input @bind="@Value"
           type="checkbox"
           class="custom-control-input"
           id="customSwitch1"/>
    <label class="custom-control-label"
           for="customSwitch1">
        @Label
    </label>
</div>

@code {
    bool switchValue = false;

    [Parameter]
    public bool Value
    {
        get => switchValue;
        set
        {
            if (switchValue == value) return;
            switchValue = value;
            ValueChanged.InvokeAsync(value);
        }
    }
    [Parameter]
    public EventCallback<bool> ValueChanged { get; set; }

    [Parameter]
    public string Label { get; set; }
}

@标签
@代码{
bool switchValue=false;
[参数]
公共布尔值
{
get=>switchValue;
设置
{
if(switchValue==value)返回;
开关值=开关值;
ValueChanged.InvokeAsync(值);
}
}
[参数]
public EventCallback ValueChanged{get;set;}
[参数]
公共字符串标签{get;set;}
}
用法:

<Switch @bind-Value="@myValue" Label="Toggle this switch element"/>


这就是我正在做的-检查而不是值。选中了,是,仅在按预期选中绑定时有效。只有在我的VS 2019解决方案中,我才能毫无错误地绑定任何东西。我们必须深入研究这个项目。奇怪。谢谢你的意见@多米尼克·科斯瓦尔德:是的,看起来很奇怪。但是,它不会运行。您将得到一个运行时错误。