0

我有版本5.0.11Microsoft.AspNetCore.Components.WebAssembly. 我制作了以下页面和组件:

    public class ViewModel
    {
        public string Value { get; set; }
    }
@page "/"

<EditForm @ref="form" Model="vm">
    <select type="text" @onchange="HandleChange">
        <option label="Cat" value="Cat" />
        <option label="Dog" value="Dog" />
        <option label="Rat" value="Rat" />
    </select>
    <InputComponent @bind-Value="vm.Value"/>
</EditForm>

@code {
    private EditForm form;
    private readonly ViewModel vm = new();

    private void HandleChange(ChangeEventArgs args)
    {
        vm.Value = args.Value?.ToString();
        form.EditContext!.NotifyFieldChanged(FieldIdentifier.Create(() => vm.Value));
    }
}
@inherits InputBase<string>

<h3>@myValue</h3>

@code {
    private string myValue;

    protected override void OnInitialized()
    {
        EditContext.OnFieldChanged += (_, __) => myValue = Value;
        base.OnInitialized();
    }

    protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage)
    {
        throw new NotImplementedException();
    }
}

当我从 select html 组件中选择一个值时,会调用 HandleChange 并通知编辑上下文有关更改的信息,但是当调用事件处理程序ValueInputBase保留旧值,尽管之前已vm.Value = args.Value?.ToString();分配。

结果,当我第一次选择一个值时,假设“Rat”标题保持为空,第二次尝试当我选择“Dog”时,“Rat”出现在标题中。

如何在事件处理程序中读取输入的当前值?我尝试过CurrentValueValue但没有成功。

4

0 回答 0