我正在将父 Blazor 组件中的方法传递给子组件。
父定义如下所示:
public bool AddOrUpdate(MyModel myModel)
{
// do stuff
return true;
}
在 ChildComponent.razor.cs
中它看起来像:
[Parameter]
public EventCallback<MyModel> SaveMethod { get; set; }
它从父母传递给孩子,例如:
<ChildComponent SaveMethod="@AddOrUpdate" />
当我使用在孩子中调用方法时
SaveMethod(newNote);
它抛出:
Non invocable member cannot be used like a method
有什么问题?
编辑:使用 invoke
帮助我克服了最初的错误,但现在我看到了 CS1503 Argument 2: cannot convert from 'method group' to 'EventCallback'
回答1
SaveMethod
是一个属性。您应该改用 SaveMethod.InvokeAsync(newNote);
(如果您在异步方法中,请添加 await
)。
阅读更多关于事件回调的信息https://docs.microsoft.com/en-us/aspnet/core/blazor/components/event-handling?view=aspnetcore-6.0#eventcallback。
回答2
这不是航天科技。将 EventCalback 方法模式与分配的方法匹配,它就可以工作。
这是 Enet 答案的完整工作版本:
该模型。
public class MyModel
{
public string? Name { get; set; }
}
组件
<button @onclick="SaveModel">Save</button>
@code {
private MyModel _myModel => new MyModel() { Name= $"clicked at {DateTime.Now.ToLongTimeString()}" };
[Parameter]
public EventCallback<MyModel> SaveMethod { get; set; }
private void SaveModel()
{
// Invoke the parent's AddOrUpdate, passing it an instance of
// MyModel
SaveMethod.InvokeAsync(_myModel);
}
}
和索引页面演示
@page "/"
<PageTitle>Index</PageTitle>
<MyComponent SaveMethod="this.AddOrUpdate" />
<div class="p-2">
@model.Name
</div>
@code {
MyModel model = new MyModel();
public void AddOrUpdate(MyModel myModel)
{
model = myModel;
}
}