首先你需要了解ASP.NET Core Blazor中动态创建组件的功能,其中使用到了RenderTreeBuilder。详细参考:https://docs.microsoft.com/zh-cn/aspnet/core/blazor/advanced-scenarios?view=aspnetcore-6.0
示例里有代码:
@page "/built-content"
<h1>Build a component</h1>
<div>
@CustomRender
</div>
<button @onclick="RenderComponent">
Create three Pet Details components
</button>
@code {
private RenderFragment? CustomRender { get; set; }
private RenderFragment CreateComponent() => builder =>
{
for (var i = 0; i < 3; i++)
{
builder.OpenComponent(0, typeof(PetDetails));
builder.AddAttribute(1, "PetDetailsQuote", "Someone's best friend!");
builder.CloseComponent();
}
};
private void RenderComponent()
{
CustomRender = CreateComponent();
}
}
在上述代码里我们动态构建一个组件并且传递了一个参数PetDetailsQuote,它是一个字符串类型的。但是当我们需要传一个回调参数时应该怎么写呢?
这个时候我们可以使用EventCallback,方法如下:
var callback = EventCallback.Factory.Create<string>(this, arg =>
{
// do something
});
或者无返回参数时:
var callback = EventCallback.Factory.Create(this, OnCallback);
builder.OpenComponent(0, componentType);
builder.AddAttribute(1, "OnSomething", callback);
builder.CloseComponent();