【问题标题】:Blazor select-like component does not update value in data source [duplicate]Blazor select-like组件不更新数据源中的值[重复]
【发布时间】:2020-10-23 08:17:54
【问题描述】:

在我的 Blazor Webassembly(客户端)3.2.0 应用程序中,我在页面上有很多以下 select 元素,它们创建了一个组合框,列出了 enum 的可用项目:

<select @bind="SomeEnumValue">
    @foreach (var element in Enum.GetValues(typeof(SomeEnum)))
    {
        <option value="@element">@element</option>
    }
</select>

虽然这可行,但我想防止对每个这样的组合框一遍又一遍地重复自己,并考虑创建以下 EnumSelect 组件:

@typeparam T
<select @bind="Value">
    @foreach (var element in Enum.GetValues(typeof(@T)))
    {
        <option value="@element">@element</option>
    }
</select>

@code {
    [Parameter]
    public T Value { get; set; } = default(T)!;

    [Parameter]
    public EventCallback<T> ValueChanged { get; set; }
}

然后像这样使用它:

<EnumSelect T="SomeEnum" @bind-Value="SomeEnumValue" />

但是,虽然 SomeEnumValue 属性和枚举项的显示工作正常,但在从组合框中选择另一个项时不会写回该属性。

我不确定为什么这不起作用。我有点怀疑EnumSelect 组件存储了它自己的该值的副本,而不是写回它,但我认为绑定为我解决了这个问题。

有没有(更简单的)方法可以让这个组合框组件工作?我的错误在哪里(在理解绑定方面)?

【问题讨论】:

    标签: c# data-binding blazor client-side


    【解决方案1】:

    通过稍微改写我的问题找到我的答案(抱歉,还没有习惯所有 Blazor 术语):Blazor TwoWay Binding on custom Component

    如果遇到我的问题,最终的工作组件如下所示:检查属性内的值是否实际更改,或者我挂起我的应用程序(可能是因为它想一遍又一遍地设置它?):

    @typeparam T
    <select @bind="Value">
        @foreach (var element in Enum.GetValues(typeof(@T)))
        {
            <option value="@element">@element</option>
        }
    </select>
    
    @code {
        private T _value = default(T)!;
    
        [Parameter]
        public T Value
        {
            get => _value;
            set
            {
                if (_value.Equals(value))
                    return;
    
                _value = value;
                ValueChanged.InvokeAsync(_value);
            }
        }
    
        [Parameter]
        public EventCallback<T> ValueChanged { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2022-01-13
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多