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);
}
我有一个 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);
}