![](/img/trans.png)
[英]How do I broadcast an EventCallback to multiple listeners in Blazor WASM?
[英]In Blazor, how can I create an interface with EventCallback?
在 Blazor 中,EventCallback 结构与标准事件有点不同,是单播而不是多播等。因此,我不认为这是重复的。
我正在尝试创建一组都具有相同[参数] EventCallback 的组件,并且使用接口来强制执行它似乎是合理的......到目前为止,这似乎是不可能的。
我尝试过的事情:
像 EventHandler 一样对待它
public interface IResolver
{
event EventCallback Done;
}
这会引发错误:事件必须是委托类型。
...以及尝试使这项工作像 EventHandler 一样的其他变体。
尝试使用 IEventCallback
EventCallback 实现了 IEventCallback,所以这看起来很有希望。 但是,它是一个内部接口,对我不可用。
使用基础 class 代替
这似乎可行,但我很好奇为什么我不能用界面来做到这一点。
还发现:
这些似乎都与这个问题无关。
使用正确的语法声明回调,它将起作用。
这是我的测试代码。
using Microsoft.AspNetCore.Components;
namespace TestBlazorServer
{
public interface ICallbackComponent
{
public EventCallback MyCallBack { get; set; }
}
}
// TestCallback.razor
@namespace TestBlazorServer
@implements ICallbackComponent
<h3>TestCallback</h3>
<button class="btn btn-danger" @onclick="() => this.CallCallback()">Test Me</button>
我们现在用[Parameter]
声明MyCallBack
。
using Microsoft.AspNetCore.Components;
namespace TestBlazorServer
{
public partial class TestCallback : ComponentBase, ICallbackComponent
{
[Parameter] public EventCallback MyCallBack { get; set; }
private void CallCallback()
{
MyCallBack.InvokeAsync();
}
}
}
我们可以在index.razor
中声明多个实例。
// index.razor
<TestCallback MyCallBack="Callback1"></TestCallback>
<TestCallback MyCallBack="Callback2"></TestCallback>
<TestCallback MyCallBack="Callback3"></TestCallback>
<div>Test:@called</div>
@code {
private string called;
private void Callback1()
=> called = "First";
private void Callback2()
=> called = "Second";
private void Callback3()
=> called = "Third";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.