首先你需要了解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();