1

根据这篇文章deep copying,我正在尝试对我的 userControl 进行深层复制。所以在我的主视图模型中,我有:

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

    }

我的用户控件里面也有简单的用户控件。所以 userControl Clone 方法的代码是:

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

而我简单的 userControl 的 Clone 方法是:

 public override object Clone()
 {
     return MemberwiseClone();
 }

问题是当我更改主对象时,我的克隆对象发生了变化。任何想法我错在哪里?

4

1 回答 1

-1

二进制序列化可能是进行真正深度克隆的最简单方法。

using(var stream = new MemoryStream())
{

    var formatter = new BinaryFormatter();
    formatter.serialize(stream, objectToClone);
    stream.Seek(0, SeekOrigin.Begin);
    return (MyType)formatter.Deserialize(stream);    
}
于 2013-07-26T11:50:24.560 回答