I am trying to develop a component in Blazor and I would like it to get all its functionality (texts, EventCallbacks, etc) from a C# class. Something like this:
Blazor Component (Code Behind):
public partial class Card : ComponentBase
{
[Parameter] public CardData CardData { get; set; }
protected async Task OnActionFiredEvent(EventCallback<object> eventCallback, object itemId)
{
if (eventCallback.HasDelegate)
await CardData.CardTitleOnClickAction.InvokeAsync(itemId);
}
}
Blazor Component (Razor):
<!-- Card image -->
<div class="view view-cascade overlay">
<a>
<div class="mask rgba-white-slight waves-effect waves-light"></div>
</a>
</div>
<!-- Card content -->
<div class="card-body card-body-cascade text-center">
<!-- Title -->
<h4 class="card-title">
<a class="waves-effect waves-light" @onclick="@(() => OnActionFiredEvent(CardData.CardTitleOnClickAction, CardData.CardItemId))">
<strong>@CardData.CardTitle</strong>
</a>
</h4>
<!-- Subtitle -->
@if (!string.IsNullOrEmpty(CardData.CardSubTitle))
{
<h6 class="font-weight-bold indigo-text py-2">@CardData.CardSubTitle</h6>
}
<!-- Text -->
@if (!string.IsNullOrEmpty(CardData.CardText))
{
<p class="card-text">
@CardData.CardText
</p>
}
</div>
<!-- Card footer -->
<div class="card-footer text-muted text-center">
@CardData.CardFooter
</div>
CarData class:
public class CardData
{
public object CardItemId { get; set; }
public string CardTitle { get; set; }
public string CardSubTitle { get; set; }
public string CardText { get; set; }
public string CardFooter { get; set; }
public EventCallback<object> CardTitleOnClickAction { get; set; }
}
Use:
<Card CardData="@(new CardData() {
CardTitle = "TextTitle",
CardTitleOnClickAction = EventCallBackMethod,
CardSubTitle = "TextSubTitle",
CardText = "Text"})" />
The problem is that I get the following error when passing the EventCallBack as a class property: Cannot convert method group 'EventCallBackMethod' to non-delegate type 'EventCallback'. Did you intend to invoke the method?
The method itself that is failing is something like this:
protected async Task EventCallBackMethod()
{
await DoSomething();
}
Any idea how to solve this?