What you're looking for is the Memento pattern. This pattern allows you to "save" and "restore" changes to an object. It is popular with undo/redo situations.
If you don't need this but in one case then really the best option is to pass to your view model the data you want to modify and have it copy the values it cares about into properties. Then bind the UX to the properties. When the user "cancels" then there is nothing you need to do. If they "save" then you copy the properties from the model back to the original object.
If you really need a memento implementation then it is not hard to create your own interface and implementation. Because objects can vary wildly and what you may or may not want to save/restore can vary you'll end up having to implement this for each type you want to support it with. There are countless examples online on how to do this in C#. But I wouldn't go that route unless you really need the complexity.