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

C# 共享blazor组件中的按钮和自定义事件处理程序列表,c#,events,delegates,blazor,C#,Events,Delegates,Blazor,这件事让我束手无策,我一直在网上尝试各种各样的方法,但似乎一无所获 我有一个共享组件,在本例中是一个模仿web表单时代列表视图的组件。我希望任何未来的开发人员能够在项目中实现列表视图,并能够构建一组自定义按钮,将其附加到每一行(这一点我可以很好地工作)。我遇到的麻烦是能够为每个按钮分配一个自定义操作处理程序,以便在列表视图的父组件上运行一个方法。我有一门课是这样的: using System; namespace Speedy.Razor.SharedComponents.WebFormCom

这件事让我束手无策,我一直在网上尝试各种各样的方法,但似乎一无所获

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

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>
}
使用系统;
namespace.Razor.SharedComponents.WebFormComponents.Shared
{
公共集体诉讼
{
公共字符串名称{get;set;}
公共字符串图标{get;set;}
公共操作OnClick{get;set;}
}
}
我将其应用于该行,如下所示:

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>
}
foreach(CustomActions中的var customAction)
{
}
好的

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

List<CustomAction> customActions = new List<CustomAction>()
{
    new CustomAction {Name = "Edit", Icon="oi oi-pencil", OnClick =  },
    new CustomAction {Name = "Contacts", Icon="oi oi-person", OnClick = }
};
List customActions=new List()
{
新的自定义操作{Name=“Edit”,Icon=“oi oi pencil”,OnClick=},
新建CustomAction{Name=“Contacts”,Icon=“oi oi person”,OnClick=}
};
我尝试过委托,但似乎无法激发所需的方法,除非它是静态的,我不希望这样;或者我需要创建一个对Blazor中引起问题的类的引用,作为对组件上导致StateHasChanged失败的类的新引用

有什么想法吗


谢谢

这正在工作…复制并运行它。若你们有问题,可以问我,因为我不确定我应该在这里解释什么

剃刀索引
@page/“
@foreach(customActions中的var customAction)
{
计数++;
}
@代码{
列出行动;
私有整数计数=10;
私有void myclick(int myint)
{
Console.WriteLine(myint.ToString());
}
私有void myclick2(int myint)
{
Console.WriteLine(myint.ToString());
}
受保护的覆盖无效OnInitialized()
{
customActions=新列表()
{
新建自定义操作{Name=“Edit”,Icon=“oi oi pencil”,OnClick=myclick
},
新建自定义操作{Name=“Contacts”,Icon=“oi oi person”,OnClick=
myclick2};
base.OnInitialized();
}
}
为每个按钮分配一个自定义操作处理程序,以便在列表视图的父组件上运行方法

假设
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 customActions=new List()
{
新的自定义操作{Name=“Edit”,Icon=“oi oi pencil”,OnClick=ClickHandler},
新建CustomAction{Name=“Contacts”,Icon=“oi oi person”,OnClick=ClickHandler}
};
无效ClickHandler(int id)
{
... 
}

感谢您的回复,其实很简单,看了您的示例后,我意识到了我遇到这些问题的原因,这在我最初的问题中并不明显。我试图在一个无法访问类中非静态方法的方法之外初始化列表

再次感谢你帮我发现这个