[Parameter]
public object Selected
{
get => BindObject;
set
{
if (BindObject == value)
return;
BindObject = value;
SelectedChanged.InvokeAsync(BindObject);
}
}
[Parameter]
public EventCallback<object> SelectedChanged { get; set; }
In use:
<MyComponent @bind-Selected="person" />
Error CS1503
Argument 2: cannot convert from 'Microsoft.AspNetCore.Components.EventCallback<CustomBlazorComponents.Components.Pages.Home.Person>' to 'Microsoft.AspNetCore.Components.EventCallback'
How do I have an EventCallback
(for two-way binding) of type object?
You intent is not obvious, but it's unlikely the best way to approach your problem is with an object
.
Here's a refactored version of your code that demonstrates how to use generics in a component. I've used input
for demo purposes to show how the bind works.
MyComponent
@typeparam TType
<h3>MyComponent</h3>
<input @bind:get="Selected" @bind:set="OnSet"/>
@code {
[Parameter] public TType? Selected { get; set; }
[Parameter] public EventCallback<TType?> SelectedChanged { get; set; }
private async Task OnSet(TType? value)
{
await this.SelectedChanged.InvokeAsync(value);
}
}
Home
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
<MyComponent @bind-Selected="_value" />
<div class="bg-dark text-white m-2 p-2">
<pre>@_value</pre>
</div>
@code{
private string _value = "Fred";
}