
While [Parameter] passes data from parent to child, EventCallback enables the reverse — a child component notifies its parent of events.
// DeleteButton.razor
<button @onclick="HandleClick">Delete</button>
@code {
[Parameter] public EventCallback OnDelete { get; set; }
private async Task HandleClick() => await OnDelete.InvokeAsync();
}[Parameter] public EventCallback<Product> OnAddToCart { get; set; }
private async Task AddToCart()
{
await OnAddToCart.InvokeAsync(Product);
}<ProductCard Product="item" OnAddToCart="HandleAddToCart" />
@code {
private void HandleAddToCart(Product product)
{
cart.Add(product);
}
}StateHasChanged — UI re-renders automaticallyStateHasChanged() manuallyReference:
TaskLoco™ — The Sticky Note GOAT