title: Undoing Changes in Bound Objects with C#
body: <p>In my application I have a collection of data objects that define what types of data the application collects as it executes.</p>
  
  <p>The user can open a dialog window to edit these objects and that dialog window contains DataGridView instances that are bound to the collections. This means that any changes the user makes are instantly applied, which is not good.</p>
  
  <p>The other issue is that this dialog window has a Cancel button allowing the user to discard all the changes they have made since opening the window.</p>
  
  <p>Currently when the window is opened I serialize all the objects (shallow copy won't work) and if the user clicks on Cancel then I deserialize them to restore them. The problem I am running into is that this is messy. It changes all the references and some of these objects store a data history as well, which isn't serialized. I then have to have events rippling out through the application to notify objects to update their references, etc. It's a pain.</p>
  
  <p>Is there a better approach to this problem?</p>