2012-05-04 121 views
0

我正在開發一個WPF項目,並實現了一個非常簡單的方法來撤消在整個項目中很好地工作的更改級別,除了一個對象屬性更改反映在MemberwiseClone中的情況。WPF Binding&MemberwiseClone問題

我正在做的是在對象中添加或編輯屬性之前在對象中執行MemberwiseClone,然後如果用戶想撤消,我將MemberwiseClone對象的每個屬性複製回當前對象。

因爲我正在使用WPF綁定,所以使用MemberwiseClone對我很有吸引力,因爲直到現在,對屬性所做的任何更改都未反映在MemberwiseClone中。這一次,我的對象中有一個屬性,它是另一個對象的ObservableCollection,發生的情況是,如果將項目添加到ObservableCollection中,它也會添加到MemberwiseClone創建的對象中,我永遠無法真正撤消它。

有沒有辦法解決這個問題?你可能對此有任何想法都歡迎。

謝謝。

回答

1

根據Object.MemberwiseClone Remarks您的ObservableCollection中的對象引用將被複制,但不會被引用的對象本身。因此,撤銷集合引用了相同的可能更改的對象。

您需要深層複製,而不是淺層複製。看看How do you do a deep copy an object in .Net (C# specifically)?

+0

我正在使用鏈接中的擴展方法,但是我得到以下異常:在程序集'WindowsBase,Version = 4.0.0.0,Culture = neutral,PublicKeyToken中鍵入'System.ComponentModel.PropertyChangedEventManager' = 31bf3856ad364e35'未標記爲可序列化。 有什麼想法?我已將所有類標記爲Serializable。 – MikeMalter

+0

您必須使用ObservableCollection在您的類上使用[Serializable]屬性。有關示例,請參見[基本序列化](http://msdn.microsoft.com/zh-cn/library/4abbf6k0%28v=vs.100%29.aspx)。 – LPL

+0

也看看[這篇文章](http://stackoverflow.com/a/8879533/620360)。 – LPL