1

この記事のディープ コピーによると、userControl のディープ コピーを作成しようとしています。したがって、私のメインのviewModelには次のものがあります。

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 に答える