动态生成控件

时间:2020-09-03 13:57:27

标签: c# blazor

我有一个foreach循环,我需要创建一个按钮,该按钮允许用户获取特定位置的地址。问题是生成页面时,如果单击ANY按钮,它们都会显示弹出窗口。

@foreach (var schedule in _schedules) {
     <BSButton Id="popover1" onclick="onclick1">@schedule.Location.NickName</BSButton>
     <BSPopover Target="popover1" IsOpen="@IsOpen1" Placement="Placement.Top">
         <BSPopoverHeader>@schedule.Location.Name</BSPopoverHeader>
         <BSPopoverBody>@schedule.Location.Address</BSPopoverBody>
     </BSPopover>
 }

同一页顶部的代码

@code {
bool IsOpen1 { get; set; }
void onclick1(MouseEventArgs e)
{
    IsOpen1 = !IsOpen1;
    StateHasChanged();
}
}

我在弄清楚如何生成这种类型的控件时遇到了麻烦。我知道问题是所有控件的onclick都相同。即使我动态更改了onclick =“ @ popoverTextId”中的名称,如何在 @code {}

中动态创建代码

1 个答案:

答案 0 :(得分:1)

我将假设Schedule有一个ID。否则,请即兴创作。

 <BSButton @onclick="() => onclick1(schedule.Id)"> ... </BSButton>
    ....  IsOpen="@(schedule.Id == SelectedId)" ...

void onclick1(int scheduleId)
{
    SelectedId = scheduleId;
    //StateHasChanged();
}