2013-07-26 56 views
0

根據這篇文章deep copying,我試圖做一個我的userControl的深層副本。 所以在我的主視圖模型我有:深拷貝userControl

public object Clone() 
    { 
     var cloneControl = (ISelectableViewModel) SelectedObject; //SelectedObject it's current userControl 
     return cloneControl.Clone(); 

    } 

我的用戶也可在室內簡單的用戶控件。因此,對於用戶控件Clone方法的代碼是:

public override object Clone() 
    { 
     var partikel1Clone = (UserControl05Partikel1ViewModel) MemberwiseClone(); 
     partikel1Clone.UserControl1.ViewModel = (ISelectableViewModel) UserControl1.ViewModel.Clone(); 
     return partikel1Clone; 
    } 

而且我簡單的用戶控件的克隆方法是:

​​

的問題是,我的克隆對象的變化,當我改變主要對象。任何想法,我錯了嗎?

+1

Memberwise克隆只有一個深度。 –

+0

@亨克是的,但我打電話給我的內部控制調用克隆方法,調用另一個Memberwise – Sasha

+1

我會認爲控件(UIElements)不克不及...你不擁有源,並且在這裏有15層的繼承。 –

回答

0

二進制序列化可能是實現真正深度克隆的最簡單方法。

using(var stream = new MemoryStream()) 
{ 

    var formatter = new BinaryFormatter(); 
    formatter.serialize(stream, objectToClone); 
    stream.Seek(0, SeekOrigin.Begin); 
    return (MyType)formatter.Deserialize(stream);  
} 
+0

它不能幫助我,因爲在序列化過程中,我在Assembly'PresentationCore,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'中得到類型'System.Windows.Media.SolidColorBrush'的錯誤未標記爲可序列化。 – Sasha

+0

也許你可以創建一個新的Usercontrol並簡單地克隆重要的部分...... –