es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada de retorno de evento con Blazor.

Estoy aprendiendo sobre EventCallBack con Blazor, pero quería saber si hay una manera de que mi método de retorno devuelva un segundo argumento en el lado del padre. Me gustaría saber el ID de fila de la que proviene.

Código del padre

@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);
    }
}

Componente secundario 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);
    }
}

No estoy seguro de cómo lograr esto, si es posible (el depurador me da un error). La única otra forma sería cambiar mi clase genérica para agregar el atributo rowID en ella. ¿Pero hay alguna otra forma?

Cambiar las líneas (lo que me gustaría que fuera)

<addwidgettocolumncomponent rowid="rw.rowID" onaddingwidget="AddWidgetToRow(rw.rowID)"></addwidgettocolumncomponent>

y esta línea
private void AddWidgetToRow(GenericWidgets evnt, int rowID)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de devolver un segundo argumento al componente padre desde un EventCallback en Blazor. Puede modificar el EventCallback para aceptar una tupla de dos parámetros: el primero es el dato que se está pasando de vuelta al componente padre y el segundo es el rowID que desea devolver.

    Código del componente padre:

    @foreach (var rw in pg.rows)
    {
        @if (rw.rowDef == 1)
        {
            @if (rw.widgetsSection1.Count == 0)
            {
                <addwidgettocolumncomponent rowid="@rw.rowID" onaddingwidget="@((widget) => AddWidgetToRow(widget, rw.rowID))"></addwidgettocolumncomponent>
            }
        }
    }
    @code{
        ...
        private void AddWidgetToRow(GenericWidgets evnt, int rowID)
        {
            // Use rowID here
            var row = pg.rows.Where(x => x.rowID == rowID).FirstOrDefault();
            //row.addWidgetSection1(widgets);
        }
    }
    

    Componente hijo – AddWidgetToColumnComponent:

    <button class="btn btn-info" @onclick="AddComponent">Ajouter</button>
    
    @code {
        [Parameter]
        public int RowID { get; set; }
    
        [Parameter]
        public EventCallback<(GenericWidgets Widget, int RowID)> OnAddingWidget { get; set; }
    
        public async void AddComponent()
        {
            GenericWidgets widget = new GenericWidgets();
            await OnAddingWidget.InvokeAsync((widget, RowID));
        }
    }
    

    En este código modificado, estamos pasando una tupla de dos parámetros al EventCallback OnAddingWidget: los datos widget y el RowID que se pasó como parámetro en el componente AddWidgetToColumnComponent.

    En el código padre, ahora estamos pasando una función al parámetro onAddingWidget del componente AddWidgetToColumnComponent que acepta tanto los datos GenericWidgets como el rowID como parámetros. Luego podemos usar el parámetro rowID en el método del componente padre.

    Tenga en cuenta que en el código padre, también estamos usando la sintaxis @() para envolver la expresión lambda que estamos pasando al parámetro onAddingWidget. Esto se debe a que estamos pasando una tupla de datos y debemos pasarla como un solo parámetro.

    Con esta modificación del EventCallback, ahora puede devolver un segundo argumento al componente padre mientras sigue pasando los datos GenericWidgets.

Comments are closed.