我有一个参数:
[Parameter]
public RateItemModel Value { get; set; } = default!;
我的剃须刀页面有:
<EditForm EditContext="EditContext" OnValidSubmit="HandleValidSubmitAsync" OnInvalidSubmit="HandleInvalidSubmitAsync" Context="editFormContext">
在初始化期间我执行以下操作:
EditContext = new EditContext(Value);
我是否需要重写OnParametersSetAsync()
并在Value
更改时重新实例化EditContext
?
更新:
这是用例。我有一份注册卡清单。每张注册卡都可以让您点击参加或不参加。当用户点击时,卡片保持打开状态,但更改后的承诺必须写入数据库,并且卡片需要显示更改后的承诺值。
简单的解决方案是将新值写入 SignupCard.Commitment,但这是一个禁忌。所以...
- 用户的单击会更改 Model.Commitment 值并调用
OnClick
. - OnClick 创建一个
Signup
对象,并将Commitment
属性设置为新值。 - 组件
EventCard
调用ValueChanged
将此Signup
对象传递给父列表页面。 - 列表页有一个分配给DxListBox 属性的
ListPage.Data
数组。DxListBox.Values
- 它将此列表浅复制到临时列表变量。
- 更改后的注册将分配到
list[index]
该临时列表中,覆盖旧值。 - 数据也在数据库中更新。
- 该列表被分配给“ListPage.Data”
- 财产
DxListBox.Values
因此而改变。所以它现在更新SignupCard.Value
列表中所有卡片的 。 - 开始这
SignupCard
一切的现在有了一个新的Value
。 - 这现在应用于“
ignupCard.Model
(应该不会改变任何内容)。 - 我相信我还需要使用
EditContext
这个新的Value
.
是的你是。因为你没有重置上下文。如果将上下文设置为新对象,整个
EditForm
[包括编辑控件]将重建。但是,假设
RateItemModel
是一个类,即引用对象,您的问题会引发几个问题。如何检测是否
Value
发生变化?引用更改是可以的,但是如果您在编辑上下文之外更改对象会怎样。您是否覆盖了数据类的相等比较器,然后检查了相等性OnParametersSet
?为什么会
Value
改变,父组件强制渲染级联事件?如果父渲染器那么您的编辑组件将因为Value
是一个对象,所以它渲染它,因为它无法检测是否已Value
更改。假设您可以检测到更改,您需要考虑两种情况:
这是我根据您的描述构建的演示 MRE。我做了一些猜测来填补空白,并使用标准控件而不是昂贵的 DX 东西。
它使用字典来跟踪数据对象。
它可能为如何实现您想要做的事情提供了不同的见解。如果您编辑一个值然后转到其他地方,就会出现问题,但在我确定我的 MRE 非常接近您的用例之前,我不会展示如何解决该问题。
我的数据对象:
卡片”
和页面: