Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Blazor - cannot convert from 'method group' to 'EventCallback'

I have a parent component and a child component with an event callback where I want it to pass back a type of T.

The issue I'm having is that I have an error about converting

MethodGroup to EventCallback.

If I convert this to using an Action then it works, but I can't do it async which isn't ideal.

Any ideas what I'm doing wrong?


Parent

<Child DeleteCallback="@OnDelete"></Child>

public async Task OnDelete(T item)
{ ... }

Child

@typeparam T

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

 <a @onclick="() => DeleteCallback.InvokeAsync(item)"></a>

I've added a repo here explaining the problem. Looking at the Issues for Blazor, this should;ve been fixed in 2019. https://github.com/scott-david-walker/EventCallbackError

like image 880
scottdavidwalker Avatar asked Oct 11 '20 20:10

scottdavidwalker


3 Answers

You were close:

<ChildComponent Item="someModel" T="SomeModel" DeleteCallback="OnDeleteSomeModel" />

@code {
    SomeModel someModel = new SomeModel();

    void OnDeleteSomeModel(SomeModel someModel)
    {
        ...
    }
}

The EventCallback uses a generic type and blazor cannot infer it if you don't pass the type to the component.

This means that if you have a EventCallback<T> you need to pass the value of T to the component e.g. T="SomeType".

like image 107
Brian Parker Avatar answered Oct 08 '22 17:10

Brian Parker


I've experienced that the syntax was spot on and still getting this error.

Restarting Visual Studio 2019 solved the problem for me. Cleaning and rebuilding was not enough.

like image 33
JTvermose Avatar answered Oct 08 '22 18:10

JTvermose


In my case I declared a nullable EventCallback? - you can't do that.

like image 11
Sebazzz Avatar answered Oct 08 '22 18:10

Sebazzz