blazor 的事件回调

Event callback with blazor

我正在使用 blazor 学习 EventCallBack,但我想知道

  1. 我的 return 方法有没有办法 return 父端的第二个参数。我想知道它来自的 rowID

家长代码

 @foreach (var rw in pg.rows)
    {
        @if (rw.rowDef == 1)
        {
            @if (rw.widgetsSection1.Count == 0)
            {
                <AddWidgetToColumnComponent rowID="rw.rowID" onAddingWidget="AddWidgetToRow"></AddWidgetToColumnComponent>
            }
        }
    }
}

@code{
    ...
    private void AddWidgetToRow(GenericWidgets evnt)
    {
        //bool confirmed = await JsRuntime.InvokeAsync<bool>("confirm", "Are you sure?");
        var row = pg.rows.Where(x => x.rowID == 3).FirstOrDefault();
        //row.addWidgetSection1(widgets);
    }
}

子组件 AddWidgetToColumnComponent

<button class="btn btn-info" @onclick="@addComponent">Ajouter</button>

@code {
    [Parameter]
    public int rowID { get; set; }

    [Parameter]
    public EventCallback<GenericWidgets> onAddingWidget { get; set; }

    public async void addComponent()
    {
        GenericWidgets widget = new GenericWidgets();
        await onAddingWidget.InvokeAsync(widget);
    }

如果可能的话,我不确定如何完成这个(调试器给我错误)。唯一的其他方法是更改​​我的通用 class 以在其中添加 rowID 属性。但是还有别的办法吗?

更改台词(我想要的)

<AddWidgetToColumnComponent rowID="rw.rowID" onAddingWidget="AddWidgetToRow(rw.rowID)"></AddWidgetToColumnComponent>

和这一行

private void AddWidgetToRow(GenericWidgets evnt, int rowID)

如果问题是关于如何让 EventCallback 在具有多个参数的父级上触发,我通常通过创建一个 class 来封装需要传递的所有内容来实现。

所以你最终可能会得到这样的结果:

 [Parameter] public EventCallback<AddWidgetArgs> onAddingWidget { get; set; }

而 AddWidgetArgs 是一个 class,例如:

public class AddWidgetArgs 
{
    public GenericWidgets GenericWidget { get; set; } // My guess at your 1st parameter 
    public int RowId { get; set; } // Additional parameter
}

然后你像这样在父级上使用它:

 private void AddWidgetToRow(AddWidgetArgs args)  { ... } // Or async Task, etc.