繁体   English   中英

共享 blazor 组件中的按钮和自定义事件处理程序列表

[英]List of buttons and custom event Handlers in a shared blazor component

我对这个已经无能为力了,我一直在网上尝试各种方法,但似乎一无所获。

我有一个共享组件,在本例中是一个模仿 Web 表单时代列表视图的组件。 我希望任何未来的开发人员在项目中实现列表视图,并能够构建一组自定义按钮以附加到每一行(这一点我可以正常工作)。 我遇到的问题是能够为每个按钮分配一个自定义 Action 处理程序,以在列表视图的父组件上运行一个方法。 我有一个这样的课程:

using System;

namespace Speedy.Razor.SharedComponents.WebFormComponents.Shared
{
    public class CustomAction
    {
        public string Name { get; set; }

        public string Icon { get; set; }

        public Action<int> OnClick { get; set; }
    }
}

我正在申请这样的行:

foreach (var customAction in CustomActions)
{
   <span class="@customAction.Icon" @onclick='() => customAction.OnClick(obj.Id)'></span>
}

哪个工作正常。

然后我尝试创建自定义操作列表,如下所示:

List<CustomAction> customActions = new List<CustomAction>()
{
    new CustomAction {Name = "Edit", Icon="oi oi-pencil", OnClick =  },
    new CustomAction {Name = "Contacts", Icon="oi oi-person", OnClick = }
};

我尝试过委托,但似乎无法触发所需的方法,除非它是静态的,这是我不想要的; 或者我需要创建对导致 Blazor 中出现问题的类的引用作为对组件上的类的新引用导致 StateHasChanged 失败。

有任何想法吗?

谢谢

这是有效的...复制并运行它。 如果您有问题,请提问,因为我不确定我应该在这里解释什么。

Index.razor

@page "/"

@foreach (var customAction in customActions)
{
count++;
<span class="@customAction.Icon" @onclick="@(() => 
 customAction.OnClick(count))"></span>
}

@code{
List<CustomAction> customActions;

private int count = 10;


private void myclick(int myint)
{
    Console.WriteLine(myint.ToString());
}

private void myclick2(int myint)
{
    Console.WriteLine(myint.ToString());
}

protected override void OnInitialized()
{
    customActions = new List<CustomAction>()
{
    new CustomAction {Name = "Edit", Icon="oi oi-pencil", OnClick = myclick  
},
    new CustomAction {Name = "Contacts", Icon="oi oi-person", OnClick = 
  myclick2} };

    base.OnInitialized();
}
}

为每个按钮分配一个自定义 Action 处理程序,以在列表视图的父组件上运行一个方法

假设customActions也是该父组件的成员,只需在同一级别定义一个方法:

List<CustomAction> customActions = new List<CustomAction>()
{
    new CustomAction {Name = "Edit", Icon="oi oi-pencil", OnClick = ClickHandler },
    new CustomAction {Name = "Contacts", Icon="oi oi-person", OnClick = ClickHandler }
};

void ClickHandler(int id)
{
   ... 
}

谢谢你的回答,真的就是这么简单,看了你的例子后,我意识到我遇到这些问题的原因在我最初的问题中并不明显。 我试图在无法访问类中的非静态方法的方法之外初始化 List。

再次感谢你帮我发现这个!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM