Blazor [Parameter] 不更新输入变量

Blazor [Parameter] not updating input variables

我有一个自定义组件 InlineAutocomplete。无论我做什么,我的 pic 值和 SelectedPIC 值在我进行验证时始终为 null,但不确定为什么会这样。 该组件确实正确呈现,但无法使用正确设置的值取回我的参数。

用法如下:

<InlineAutocomplete TItem="PIC"
                    Value="@pic"
                    Selected="@SelectedPIC"
                    Data="@PICs"
                    Property="@((item) => item.PICNumber)" />
                
                

我的组件:

<div class="inline-autocomplete">
    <input @oninput="(e)=> SuggestItem(e)" type="text" @bind-value="@Value" class="overlap inline-autocomplete-input " />
    <input readonly class="overlap inline-autocomplete-label" value="@_suggestedValue" />
</div>

@code {

    string _value;
    string _suggestedValue;

    [Parameter]
    public string Value
    {
        get => _value;
        set
        {
            if (value == null)
                return;

            _value = value;
        }
    }

    [Parameter]
    public List<TItem> Data { get; set; }

    [Parameter]
    public Func<TItem, string> Property { get; set; }

    [Parameter]
    public TItem Selected { get; set; }

    void SuggestItem(ChangeEventArgs e)
    {

        if (string.IsNullOrEmpty(e.Value.ToString()))
            return;

        Value = e.Value.ToString().ToUpper();

        if (string.IsNullOrEmpty(Value))
        {
            _suggestedValue = string.Empty;
        }
        else
        {
            var selectedItem = Data.Select(Property).FirstOrDefault(x => x.StartsWith(Value, StringComparison.OrdinalIgnoreCase));
            _suggestedValue = !string.IsNullOrWhiteSpace(selectedItem) ? selectedItem : string.Empty;
            Selected = Data.FirstOrDefault(x => string.Equals(Property(x), Value, StringComparison.OrdinalIgnoreCase));
            StateHasChanged();
        }

        // State has changed
        StateHasChanged();
    }
}

解决这个问题的方法是传递一个函数来更改 Parent 中的 属性 而不是 Child.

Child:

 [Parameter]
public Action<string, TItem> ValueChanged { get; set; }

...

@code {
     void SomeFunction() {
          ValueChanged(Value, Selected);
     }
}

Parent:

<InlineAutocomplete ... ValueChanged="FireEvent" />

void FireEvent(string stringVal, MyClass c)
{
    // ... Do Something
}