blazor 的事件回调
Event callback with blazor
我正在使用 blazor 学习 EventCallBack,但我想知道
- 我的 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.
我正在使用 blazor 学习 EventCallBack,但我想知道
- 我的 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.