Пройдите пустой колбэк Blazor - PullRequest
1 голос
/ 28 января 2020

У меня есть компонент, который принимает обратный вызов в качестве параметра. Я только хочу передать ему обратный вызов, если определенное условие выполняется. Что я могу передать ему, который не пройдет проверку Callback.HasDelegate

Что-то вроде

<EntityActionMenu  DeleteCallback="@(Item.Id == 0 ? null : EventCallback.Factory.Create(this, Delete))"></EntityActionMenu>

или

<EntityActionMenu SaveCallback="@Save" DeleteCallback="@(Item.Id == 0 ? EventCallback.Factory.Create(this, Task<null>) : EventCallback.Factory.Create(this, Delete))" ></EntityActionMenu>

Редактировать

Это принимающий компонент

@if (DeleteCallback.HasDelegate)
        {
            <MatButton Raised="true" OnClick="@(() => DeleteCallback.InvokeAsync(""))" Class="warn">Delete</MatButton>
        }

@code {

    [Parameter] public EventCallback DeleteCallback { get; set; }

    protected override void OnInitialized()
    {
        System.Diagnostics.Debug.WriteLine(DeleteCallback.HasDelegate);
    }

    protected override void OnParametersSet()
    {
        System.Diagnostics.Debug.WriteLine(DeleteCallback.HasDelegate);
    }

}

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Если вы хотите использовать HasDelegate, чтобы определить, отображать кнопку или нет, вы должны создать EventCallback с делегатом null. Если вы используете EventCallback.Empty HasDelegate, то вернет true.

Я думаю, что-то подобное будет работать.

<EntityActionMenu SaveCallback="Save"
              DeleteCallback="@(item.ID == 0 ? new EventCallback(null, null) : 
              EventCallback.Factory.Create(this, Delete))" />

В качестве альтернативы вы можете изменить свой компонент, чтобы проверить, если DeleteCallback является нулевым, а не использовать HasDelegate. например,

@if (DeleteCallback is null)
{
    <MatButton Raised="true" OnClick="@(() => DeleteCallback.InvokeAsync(""))" Class="warn">Delete</MatButton>
}

Это может помочь вам.

0 голосов
/ 28 января 2020

Почему бы вам просто не проверить идентификатор в вашем методе обратного вызова?

Предполагая следующий код в EntityActionMenu:

[Parameter]
public EventCallback<int> DeleteCallback { get; set; }

Затем вы можете сделать:

<EntityActionMenu  DeleteCallback="@Delete"></EntityActionMenu>

@code {
   protected void Delete(int id)
   {
       if (id == 0) return;

       /* your code */ 
   }
}
...