以下示例展示了如何在父节点之间执行双向数据绑定
组件及其子组件。在这两个组件中的每一个都是一个文本框控件。当您在父组件的文本框中键入文本时,子组件文本框中的文本会更改以反映在父组件中所做的更改,
反之亦然……
ChildComponent.razor
<div style="border:solid 1px red">
<h2>Child Component</h2>
<input type="text" @bind="Text" @bind:event="oninput" />
</div>
@code {
private string text { get; set; }
[Parameter]
public string Text
{
get { return text; }
set
{
if (text != value) {
text = value;
if (TextChanged.HasDelegate)
{
TextChanged.InvokeAsync(value);
}
}
}
}
[Parameter]
public EventCallback<string> TextChanged { get; set; }
}
ParentComponent.razor
@page "/ParentComponent"
<h1>Parent Component</h1>
<input type="text" @bind="Text" @bind:event="oninput" />
<p></p>
<ChildComponent @bind-Text="Text" />
@code {
[Parameter]
public string Text { get; set; } = "Hello Blazor";
}
我通过在我的子组件中创建一个 EventHandler 并通过回调进行更新来解决它。但我觉得我错过了一些东西
您缺少的是本示例中用于调用父组件并将在子组件中输入的值传递给它的 EventCallback 'delegate' 的存在。这就是我们定义“委托”的方式
[Parameter]
public EventCallback<string> TextChanged { get; set; }
这就是我们调用它的方式,当 Text 属性的值发生变化时:
TextChanged.InvokeAsync(value);
你使用了什么委托?注意EventCallback的目标不是子组件,而是父组件……
祝你好运...如果有不清楚的地方,请不要犹豫...