2013-03-06 88 views
3

現狀WPF「撤銷」深拷貝

我有,我用MVVM和NHibernate WPF應用程序。我有一個帶有所有客戶的列表框的主/細節窗口,而列表框的selectedItem是用於在細節屏幕中顯示客戶細目的對象。 在細節中,我有一個添加,編輯,刪除,保存和撤消按鈕。一切工作與我設置的綁定。

問題

但我撤銷按鈕,我想使原來的客戶對象的副本,所以當我點擊撤銷按鈕的字段將重置了從原始值的值。但在我的客戶對象中,我有一個Address對象,並且有一個淺拷貝,這兩個對象將保持對該對象的相同引用。所以,當我從地址對象中更改一個字段時,原來的客戶地址也會被更改。我想這樣做我的客戶地址的深層副本,但我不能讓我的對象序列化(這不是在我的控制來改變模型對象)

  • 有沒有辦法做了深刻的副本,而不繫列化?
  • 還是有一些標準的方式來完成我想要實現的行爲?

回答

2

我會簡單地回到數據庫並重新加載客戶對象。這可確保您顯示的數據與數據庫中的數據一致,並降低併發問題的風險。

+0

我沒有這樣想過,但在我看來這不是最佳做法?但我認爲它肯定會爲我做這項工作,我會嘗試一下 – koala 2013-03-06 18:26:01

+0

IMO顯示用戶的新數據是最好的做法,除非有明顯的性能原因否則。編碼也更容易,並且更容易出錯。 – 2013-03-06 18:30:49

+0

我試過了,但我注意到當我回到數據庫時,我想讓同一個對象擁有它的副本,看起來我沒有第二個具有舊值的獨立對象。我認爲nhibernate知道我已經在使用這個對象,只是使用那個...對此有任何想法? – koala 2013-03-08 13:04:49