我正在将一个方法从父级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'
发布于 2022-05-18 18:59:21
SaveMethod
是一个属性。相反,您应该使用SaveMethod.InvokeAsync(newNote);
(如果您在异步方法中,则添加await
)。
了解更多关于事件回调这里的信息。
发布于 2022-05-18 21:27:34
这不是火箭科学。将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;
}
}
https://stackoverflow.com/questions/72294360
复制相似问题