Easly cancellable operations WPF
You could empower IEditableObject. Here is a good article. Approach described will allow your model to do not mix concerns - they use memento design pattern.

UPDATE: I do not feel right by copy-pasting that article, so I would still recommend to have a look at it. Quick test though might look like the following:

1) Download and reference BindingOriented.Adapters project in your WPF application.

2) Create model:

public class Contact
{
    public string Name { get; set; }
}


3) Create view model (I used MvvmLight for RelayCommand):

public class MainViewModel 
{        
    public MainViewModel()
    {
        Contact = new EditableAdapter&lt;Contact&gt;(new Contact() { Name="Dmitry" });
        OKCommand = new RelayCommand(() =&gt; Contact.EndEdit());
        CancelCommand = new RelayCommand(() =&gt; Contact.CancelEdit());
    }

    public EditableAdapter&lt;Contact&gt; Contact { get; }
    public ICommand OKCommand { get; }
    public ICommand CancelCommand { get; }
}


4) Update MainWindow to include:

&lt;StackPanel&gt;
    &lt;StackPanel.DataContext&gt;
        &lt;vm:MainViewModel/&gt;
    &lt;/StackPanel.DataContext&gt;
    &lt;TextBox Text="{Binding Contact.Name}"/&gt;
    &lt;Button Content="OK" Command="{Binding OKCommand}"/&gt;
    &lt;Button Content="Cancel" Command="{Binding CancelCommand}"/&gt;
&lt;/StackPanel&gt;


It works :)