Список кнопок и пользовательских обработчиков событий в компоненте общего блазора - PullRequest
1 голос
/ 26 марта 2020

Я в своем уме с этим, я плагин для всех видов методов в Интернете, но, кажется, никуда не денется.

У меня есть общий компонент, в этом case компонент, который имитирует представление списка из эпохи веб-форм. Я хотел бы, чтобы все будущие разработчики внедрили представление списка в проекты и смогли создать собственный набор кнопок, которые будут добавляться к каждой строке (этот бит я могу заставить работать нормально). Проблема в том, что я могу назначить пользовательский обработчик действий каждой кнопке для запуска метода в родительском компоненте представления списка. У меня есть такой класс:

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 = }
};

Я пробовал делегатов, но не могу запустить требуемые методы, если это не stati c, что мне не нужно; или мне нужно создать ссылку на класс, который вызывает проблемы в Blazor, поскольку новая ссылка на класс в компоненте приводит к сбою StateHasChanged.

Есть идеи?

Спасибо

Ответы [ 3 ]

1 голос
/ 26 марта 2020

назначить пользовательский обработчик действий каждой кнопке для запуска метода в родительском компоненте представления списка

Предполагая, что 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)
{
   ... 
}
1 голос
/ 26 марта 2020

Это работает ... скопируйте и запустите. Задайте вопрос, если у вас есть, так как я не уверен, что я должен объяснить здесь.

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();
}
}
0 голосов
/ 27 марта 2020

Спасибо за ответы, это действительно было так просто, и, посмотрев на ваш пример, я понял причину, по которой у меня возникли такие проблемы, которые не были очевидны в моем первоначальном вопросе. Я пытался инициализировать список за пределами метода, который не имел доступа к нестатичным c методам в классе.

Еще раз спасибо за помощь в определении этого!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...