【问题标题】:Blazor MatMenu taken last value in all menu in foreach loopBlazor MatMenu 在 foreach 循环中的所有菜单中取最后一个值
【发布时间】:2019-07-31 05:44:03
【问题描述】:

MatMenu 携带 foreach 循环中所有列表项的最后一个实例

        @foreach (var sub in subs)
            {
             <MatButton Label="Menu" OnClick="@OnClick" RefBack="@buttonForwardRef"></MatButton>
 <MatMenu @ref="Menu" TargetForwardRef="@buttonForwardRef">
                      <MatList SingleSelection="true">
                        <MatListItem>@sub.SubName</MatListItem>
                      </MatList>
    </MatMenu>
                  }

每一行都需要不同的菜单

【问题讨论】:

  • 我在这里找不到问题(或问题)部分。
  • 表格内的 foreach 将在每行创建一个菜单时加载,但最后一行菜单仅适用于上述所有行。
  • @novfalhaq,我的回答解决了你的问题吗?

标签: blazor matblazor


【解决方案1】:

您的问题是您在所有菜单之间共享buttonForwardRef。您是否需要每个菜单的新参考:

@using Microsoft.AspNetCore.Components

@foreach (var sub in subs)
{
    <MatButton @ref="@sub.Button2"
        Label="@sub.SubName" 
        OnClick="@( (_) => OnClick(sub.Button2, sub.Menu2, sub.SubName) )">
    </MatButton>
    <MatMenu @ref="@sub.Menu2">
        <MatList>
            <MatListItem>@sub.SubName</MatListItem>
        </MatList>
    </MatMenu>
}
<h1>@subTxt</h1>

@functions
{
    public class Sub
    {
        public string SubName {set; get;} 
        public BaseMatButton Button2 {set; get;}   // reference
        public BaseMatMenu Menu2 {set; get;}       // reference
    }

    List<Sub> subs = new List<Sub> 
    {
        new Sub() { SubName="A", Button2=null, Menu2=null },
        new Sub() { SubName="B", Button2=null, Menu2=null },
        new Sub() { SubName="C", Button2=null, Menu2=null },
    };

    string subTxt = "";

    public void OnClick(BaseMatButton button, BaseMatMenu menu, string sub)
    {
        subTxt=sub;
        menu.OpenAsync(button.Ref);        
    }

}

blazorfiddle查看样品:

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2018-11-03
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多