2010-10-11 97 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。