I have a view containing a ListView
and an "Edit" Button. The ListView's ItemSource
is bound to an ObservableCollection<Account>
property on the underlying view model. Its SelectedItem
property is also bound to the view model.
When the edit button is clicked, the existing view model launches an editing view/view model pair ("editing screen") allowing the user to edit the currently selected Account
. The Account
to edit is determined by the main view model's SelectedItem
property.
Problem: Any changes made in the editing screen are immediately reflected in the other screen's ListView
, even before the edit screen's "Save" button is clicked. Why this happens makes sense--Account
is raising property change events when its properties are changed and the ListView
is processing those notifications.
Desired Outcome: Bound controls (like the ListView
) should only see editing screen changes after"Save" is clicked.
Possible Solutions
- Suspend Account's property change notifications while editing is underway. Disadvantages: If a manual data-binding update is performed while an
Account
instance is being edited, the "in-progress" changes will appear on theListView
even though those changes haven't been raising notifications. Also, if the user launches a second edit window for the sameAccount
, they will see the "in-progress" changes. Idea rejected. - Have the editing screen view model wrap the
Account
instance in some kind ofEditingAccount
class that copies changes made to it back to the originalAccount
only whenSave()
is called. Should the editing screen take on the responsibility of facilitating this wrapping or should it ask the service layer to do it?
What do you think of these options? How do you solve this problem when you encounter it?