Value属性需要分配给
MudSelect
您需要将更改后的值传递给
EventCallback<TValue>
当您调用它时。
<MudSelect T="TValue" Label="@Label" Variant="@Variant"
AnchorOrigin="@AnchorOrigin" Value="SelectedOption.Value" ValueChanged="OnSelectedValueChanged">
private async Task OnSelectedValueChanged(TValue newValue)
{
if (OnValueChanged.HasDelegate)
await OnValueChanged.InvokeAsync(newValue);
}
如果你没有包装
MudSelect
在另一个组件中,则需要确保分配给的字段
Value
需要在处理程序方法中进行更改。例如。
private async Task OnSelectedValueChanged(TValue newValue)
{
SelectedOption.Value = newValue;
}
但是,由于它是子组件,因此父组件(
HomeDropdownComponent.razor
)应该处理更改
SelectedOption.Value
.
这里有一个简化的例子。
//main.razor
<HomeDropdownComponent Options="@options"
TValue="string"
HomeValue="@parentValue"
HomeValueChanged="OnHomeValueChanged"/>
<h1>parent chosen value:@parentValue</h1>
@code{
string parentValue;
List<string> options;
protected override void OnInitialized()
{
options = FetchOptions();
parentValue = options.First();
}
private List<string> FetchOptions()
{
return new List<string>
{
"Option 1",
"Option 2",
"Option 3",
"Option 4",
"Option 5",
};
}
void OnHomeValueChanged(string newVal){
parentValue=newVal;
}
}
//HomeDropdownComponent.razor
@typeparam TValue
<MudSelect Value="HomeValue" ValueChanged="HandleChange" T="TValue" Variant="Variant.Text" >
@foreach (var option in Options)
{
<MudSelectItem Value="@(option)">
</MudSelectItem>
}
</MudSelect>
<h1>child chosen value:@HomeValue</h1>
@code{
[Parameter] public List<string> Options { get; set; }
[Parameter] public TValue HomeValue { get; set; }
[Parameter] public EventCallback<TValue> HomeValueChanged { get; set; }
async Task HandleChange(TValue newVal){
await HomeValueChanged.InvokeAsync(newVal);
}
}
Demo
MudBlazor Snippet