Blazor 将函数调用附加到 EventCallBack

Blazor attach function call to EventCallBack

我有一个 blazor 函数是

public async Task DoSomething()

我还有一个这样的 class 对象:

public class SomeClass
{
    public string Title { get; set; }
    public string Icon { get; set; }
    public EventCallback OnClick {get;set;}
}

此 class 对象由 Blazor 组件使用。我想做的是将 DoSomething() 事件附加到 class 对象中的 EventBackkBack OnClick。我试过这个:

_collection.Add(new SomeClass{ Title = "some title", Icon = "icon", OnClick = DoSomething});

这不起作用,因为编译器说不能将方法组转换为非委托类型 EventCallBack ...

如果我将 属性 OnClick 更改为“Action”,我可以让它工作,但这需要函数调用为“async void”。由于其他原因,我不能这样做。

有没有办法将这个异步任务函数附加到 OnClick?谢谢!

理解错误:EventCallBack 是您在 Razor 组件上公开为可绑定 属性 的内容,通常不是 class 上的 属性。

Chris Sainty 在这篇文章中展示了这是如何工作的:https://chrissainty.com/3-ways-to-communicate-between-components-in-blazor/

在第一个例子中,他的组件有一个可绑定的 属性

[Parameter] public EventCallback<string> OnClick { get; set; }

这告诉使用该组件的人它将发送一个带有字符串参数的事件。这可以绑定到他接下来展示的方法:

<ChildComponent OnClick="ClickHandler"></ChildComponent>

<p>@message</p>

@code {

    string message = "Hello from ParentComponent";

    void ClickHandler(string newMessage)
    {
        message = newMessage;
    }

}

请注意,绑定方法 ClickHandler 不是异步的。 Blazor 支持异步和同步调用,也可以是

    async Task ClickHandler(string newMessage)
    {
        message = await SomeAsyncMethod(newMessage);
    }