c# - 将函数作为参数传递给动态创建的组件 blazor
问题描述
我正在尝试将一些参数传递给动态生成的组件
家长
...
DynamicComponent = builder =>
{
Type moduleType = Type.GetType(ChildComponentName);
System.Diagnostics.Debug.WriteLine(moduleType);
if (moduleType != null)
{
builder.OpenComponent(0, moduleType);
builder.AddAttribute(1, "title", "Delete + " + item.Name + "?");
builder.AddAttribute(2, "content", "Are you sure you want to delete this organization?");
builder.AddAttribute(3, "YesCallback", whatgoeshere?);
builder.AddComponentReferenceCapture(1, inst => { child = Convert.ChangeType(inst, moduleType); });
builder.CloseComponent();
}
};
public void Delete(string msg)
{
System.Diagnostics.Debug.WriteLine(msg);
items.RemoveAt(DeleteIndex);
}
...
孩子
...
[Parameter] public string Title { get; set; }
[Parameter] public string Content { get; set; }
[Parameter] public EventCallback<string> YesCallback { get; set; }
...
组件生成并显示正常。前两个参数设置得很好。我想不通的是如何将父Delete
函数作为第三个属性传递,以便孩子可以调用它。
解决方案
您可以使用EventCallbackFactory.Create
来从简单的操作创建事件回调。除了动作之外,您还必须传递事件接收器,该接收器通常是执行动作的组件。
您可以通过以下方式访问工厂EventCallback.Factory
:
var callback = EventCallback.Factory.Create<string>(this, arg =>
{
// do something
});
您也可以传递具有正确签名的方法:
var callback = EventCallback.Factory.Create<string>(this, OnCallback);
然后,您可以将创建的事件回调直接传递给该AddAttribute
方法:
builder.OpenComponent(0, componentType);
builder.AddAttribute(1, "OnSomething", callback);
builder.CloseComponent();
推荐阅读
- node.js - 安装 NuxtJs 时出现错误
- svelte - 将 GSAP 与 svelte 一起使用
- c# - 枚举的目的是什么?
- c# - 如何在鼠标和键盘两分钟未使用时显示消息?
- python - 使用 Python 访问 FTP 服务器失败并出现“getaddrinfo”错误
- kotlin - 在 Jackson 中为 YAML 配置数组/对象缩进
- linux - 如何运行特权 Docker 容器以使用 systemctl
- kubernetes - CLI 和 Peer/Orderer 之间的连接无法正常工作(Kubernetes 设置)
- r - R中按日期分组的条件总和
- wso2 - 如何从 wso2 esb 中的属性文件中读取数据