Blazor MatMenu taken last value in all menu in foreach loop

落爺英雄遲暮 提交于 2019-12-24 06:48:52

问题


MatMenu carrying last instance for all the listitems in foreach loop

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

Everey row want differene menu


回答1:


Your issue is that you are sharing buttonForwardRef between all menus. Do you need new references for each menu:

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

}

Check sample at blazorfiddle:



来源:https://stackoverflow.com/questions/57283973/blazor-matmenu-taken-last-value-in-all-menu-in-foreach-loop

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!