【发布时间】:2021-04-26 01:14:53
【问题描述】:
我正在尝试使用嵌套组件构建概念证明。
我有一个主组件,声明如下
public abstract class VoidHtmlComponent : ComponentBase
{
[Parameter] public EventCallback<MouseEventArgs> OnClick { get; set; }
}
然后我将TableHead 的实例传递给我的Table 组件
<Shared.RazorComponents.Table TableHead="@(new TableHead{ OnClick = HandleTableHeadClick})" >
</Shared.RazorComponents.Table>
@code{
private void HandleTableHeadClick(MouseEventArgs mouseEventArgs)
{
Trace.WriteLine($"TableHead has been clicked ...");
}
}
这不会建立说明
Client\Pages\Table.razor(6,213):错误 CS0428:无法将方法组“HandleTableHeadClick”转换为非委托类型“EventCallback”。您是否打算调用该方法?
我猜 blazor 在这里做了一些魔术来将 Action<MouseEventArgs> 转换为 EventCallback<MouseEventArgs> 但我被困在这一点上。我还将参数更改为Action<MouseEventArgs>,这会在运行时引发错误,提示强制转换无效。
已经尝试使用 EventCallbackFactory 但也卡在那里了。
使用OnClick = new EventCallbackFactory().Create(this, HandleTableHeadClick) 抛出
函数语句需要函数名
在运行时。
【问题讨论】:
-
如果您将
OnClick = HandleTableHeadClick更改为OnClick = e => HandleTableHeadClick(e)是否有效? -
@Ben 在构建期间抛出
Client\Pages\Table.razor(6,213): Error CS1660: Cannot convert lambda expression to type 'EventCallback<MouseEventArgs>' because it is not a delegate type
标签: c# blazor webassembly