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

问题描述 投票:-1回答:1

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

在详细视图的OnNavigatedTo中,我具有:

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

我制作_persons [0]的Memberwise副本并在“详细信息视图”中显示_persons [0]:

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

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

[当用户按下“取消编辑”按钮时,我要恢复保存的副本。

都尝试过:

PersonEdit _savedPerson;
_persons[0] = _savedPerson;

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

有什么想法吗?

谢谢,

Helmut

wpf prism
1个回答
0
投票

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

直到那时,由于

[当用户编辑详细信息视图中的“名字”文本框,更改将立即反映在网格中

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

因此,请勿克隆和编辑克隆,而应保留克隆,并在用户单击撤消按钮时将每个可编辑的值从克隆复制到原始对象。

旁注:如果您使用默认的Clone实现,则最好110%确保这对于您的域是正确的(并且将来还会使用。)>

© www.soinside.com 2019 - 2024. All rights reserved.