0

我正在开发一个 WPF 项目,并实现了一种非常简单的方法来撤消一个级别的更改,该更改在整个项目中运行良好,除了对象属性的更改反映在 MemberwiseClone 中的一种情况。

我正在做的是在我的对象中添加或编辑属性之前在我的对象中执行 MemberwiseClone,然后如果用户想要撤消,我将 MemberwiseClone 对象中的每个属性复制回我的当前对象。

因为我使用的是 WPF 绑定,所以使用 MemberwiseClone 对我很有吸引力,因为到目前为止,对属性所做的任何更改都没有反映在 MemberwiseClone 中。这次我的对象中有一个属性,它是另一个对象的 ObservableCollection,发生的情况是,如果我将一个项目添加到 ObservableCollection,它也会添加到由 MemberwiseClone 创建的对象中,我永远无法真正撤消。

有没有办法解决?欢迎您对此有任何想法。

谢谢。

4

1 回答 1

1

根据Object.MemberwiseClone Remarks将复制您中的对象引用,ObservableCollection但不会复制引用的对象本身。因此,您的撤消集合引用了相同的可能更改的对象。

你需要一份深拷贝,而不是浅拷贝。看看如何在 .Net(特别是 C#)中对对象进行深度复制?

于 2012-05-04T21:58:25.853 回答