【问题标题】:pass function as parameter to dynamically created component blazor将函数作为参数传递给动态创建的组件 blazor
【发布时间】:2020-01-21 20:44:25
【问题描述】:

我正在尝试将一些参数传递给动态生成的组件

家长

...
    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 函数作为第三个属性传递,以便孩子可以调用它。

【问题讨论】:

    标签: c# asp.net-core blazor


    【解决方案1】:

    您可以使用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();
    

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2020-03-12
      • 1970-01-01
      相关资源
      最近更新 更多