I’m working on a WPF project and have implemented a very simple way to undo one level of change which works nicely throughout the project except for one case where changes to an object’s property reflects in the MemberwiseClone.
What I am doing is to do a MemberwiseClone in my object before adding or editing properties in that object, and then if the user wants to undo, I copy each property from the MemberwiseClone object back into my current object.
Because I am using WPF binding, using the MemberwiseClone is attractive to me because up until now, any change made in a property was not reflected in the MemberwiseClone. This time I have a property in my object that is an ObservableCollection of another object, and what is happening is that if I add an item to the ObservableCollection, it also gets added to the object created by MemberwiseClone and I can never truly undo.
Is there any way around this? Any thoughts you might have on this are welcomed.
Thanks.
According to Object.MemberwiseClone Remarks the object references in your
ObservableCollectionwill be copied but not the referenced object itself. Therefore your undo collection references the same possible changed objects.You need a deep copy, not a shallow one. Take a look at How do you do a deep copy an object in .Net (C# specifically)?