绑定到 Blazor 中的 ExpandoObject

Binding to a ExpandoObject in Blazor

我构建了一个 class,它有一个动态的属性列表(例如颜色、大小、重量等),其内容在编译时是未知的,所以我使用了 ExpandoObject

我努力的地方是让 Blazor 绑定到对象的值属性,例如

@foreach (var option in (IDictionary<string, object>)selectedProduct.Properties)
{
    <div class="col-sm">
        <input type="text" placeholder="@option.Key" @bind="option.Value"/>
    </div>
}

然而,编译时自动生成代码会导致错误:- 'KeyValuePair<string, object>.Value' cannot be assigned to

有没有人成功绑定到 ExpandoObject(和子属性?)

这与 ExpandoObject 没有直接关系。

当您遍历字典时,您会返回 不可变 KeyValuePair 项。

您收到一个错误,因为 @bind="option.Value" 编译为要分配给 option.Value 的代码。

由于元组和匿名类型都是不可变的,我认为您必须为此编写 <Label, Value> class。

感谢 Henk 的回答,我能够修改我的代码以支持 ExpandoObject

@foreach (var option in (IDictionary<string, object>)selectedProduct.Properties)
{
    <div class="col-sm">
        <input type="text" placeholder="@option.Key" @onchange="@((ChangeEventArgs __e) => ((IDictionary<string, object>)selectedProduct.Properties)[option.Key] = (object)__e.Value.ToString())"/>
    </div>
}

它看起来更难看,但很管用