2010-10-11 95 views
2

我试图重置我的对象绑定到一个简单的窗体(一些文本框和几个按钮)中的数据。WPF绑定到对象

我有两个单独创建的对象,但具有相同的信息。对象1使用DataBinding绑定到表单。对象2可以将对象1重置为原始值。 每当用户编辑数据时,一切都很好,对象1用新值更新,而对象2保持不变。我在使用时,用户编辑的一些数据,然后一个场景一个问题点击它调用的代码看起来像这样的重置按钮:

Object1 = Object2 

价值得到复位,但现在,当用户再次编辑数据,既Object1和Object2值被更新。我无法重置。

如何在不使Object2更新同时重置Object1值的情况下? 有人可以解释为什么Object2在重置后变得可更新吗?

谢谢。

回答

2

当您说Object1 = Object2时,您只是简单地将Object1指向指向对象2的任何位置。他们分享相同的参考资料,因此两者都在同一时间更新。

我的建议是深层克隆。我不知道你们班的复杂程度。这段代码对我来说非常方便。

http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx

所以每当你重新Object1,创建传递对象2深克隆对象并将其赋值给Object1。

+0

这就是我想的,只是需要确认。 DeepClone可以完美工作。使用您意识到的DeepClone时是否存在性能问题?感谢您的帮助。 – chiefanov 2010-10-12 13:49:03

+0

那么你基本上是序列化源代码和反序列化,所以理论上这个操作会花费更多的时间。我使用带有多个表和关联数据的TypedDataSet Structures来处理它,而没有任何明显的性能损失。 – SKG 2010-10-12 14:31:36

+0

听起来不错。我会玩弄它。我没有疯狂的大对象,所以它不应该影响性能。 – chiefanov 2010-10-12 14:40:22

1

由于Object1现在只是对Object2的引用,因此Object2变为绑定。为了避免这种情况,只需将Object2的属性复制到Object1中,或者找出某种方法来克隆Object2,然后将克隆分配给Object1。