如何撤消对传递的参数 NavigationContext 的更改?

How to undo changes to passed parameters NavigationContext?

我有一个显示 Person 对象详细信息的网格。选择一行后,我将在单独的区域中显示详细信息。 当用户编辑时,例如详细信息视图中的名字文本框,更改会立即反映在网格中。 当用户决定取消编辑时,我可以通过替换详细信息视图中的对象来撤消更改,但不会还原网格视图中的更改。

在详细信息视图的 OnNavigatedTo 中我有:

_persons = navigationContext.Parameters["persons"] as List<Person>;

我制作了 _persons[0] 的 MemberwiseCopy 并在详细信息视图中显示 _persons[0]:

PersonEdit = _persons[0];
_savedPerson = _persons[0].Clone();

详细视图的所有字段都绑定到 PersonEdit。 更改绑定到 PersonEdit.FirstName 的名字,网格显示更改后的值。

当用户按下 "Cancel Edit" 按钮时,我想恢复保存的副本。

两者都试过了:

PersonEdit _savedPerson;
_persons[0] = _savedPerson;

这将恢复在“详细信息”视图中编辑之前所做的更改,但网格保持不变。

有什么想法吗?

谢谢,

赫尔穆特

我认为您应该花一些时间来构建撤消(重做?)基础设施。想到命令。

到那时,因为

When the user edits e.g. the First Name Textbox in the Details View, the changes immediately get reflected in the Grid

您应该恢复所有原始值,并且更改(即撤消)也将直接可见。

所以不要克隆和编辑克隆,而是保留克隆并在用户单击撤消按钮时将克隆中的每个可编辑值复制到原始对象。

旁注:如果您使用默认的 Clone 实现,您最好 110% 确定这对您的域是正确的(将来也是如此)。