【发布时间】:2021-08-06 09:53:46
【问题描述】:
我正在构建一个 @inherits InputBase<string[]> 的自定义 Blazor 组件。
在内部,输入 String[] 被解析并转换为对象列表。
迭代该对象列表并为每个项目输入生成:
<input type="text" value="@_list[j].Value" @onchange="(e => UpdateItem(j, e))" />
UpdateItem 方法做了几件事。例如,它更新集合中的项目并检查新值是否为空字符串,如果是则从集合中删除项目。
但是,当用户在输入文本中添加无效字符时,UpdateItem 会删除它们并执行list[index] = v,但因为list[index] == v 它不会更改底层项目或列表。 CurrentValue 保持正确,但界面没有更新,例如输入文本保持无效值,这是误导。如果我删除该项目并将其插入同一索引,它仍然无法正常工作。删除和添加它确实会更新界面,但最后添加的项目令人困惑。
我尝试在 UpdateItem 方法和其他地方调用StateHasChanged(),但没有帮助。
如何“告诉”输入值进行自我更新?或者如何将值“标记”为已更新,尽管它是相同的以触发界面更新。
也许我对这个问题有完全错误的方法。我从<input @bind="@_list[j].Value"... /> 开始,效果很好,但我需要控制绑定以验证输入并最终更改它。这就是我选择上述路线的原因。
【问题讨论】: