Everyone familiar with IEditableObject? Go read about it. I'll wait.

So by now you know that IEditableObject is an interface that gives you three methods: BeginEdit, EndEdit and CancelEdit. The idea is that before you bring up the editing UI for your object you call BeginEdit, and then if the user completes the edit you call EndEdit, but if they abandon the edit (presumably by clicking Cancel on a dialog) you call CancelEdit and the changes are "rolled back".

IEditableObject works really well when your user interface is modal. If you show a modal dialog in which the user makes changes, and force them to click OK or Cancel when they're done, you know exactly when to call the methods of IEditableObject and everything is peachy.

Family.Show Screenshot But many modern applications seem to have done away with dialogs. Vertigo's awesome Family.Show is a great example of a user interface that uses docked panels to edit content, and it generally does away with the "OK/Cancel" metaphor, instead using a single "Done" button. If I screw up while editing a person, I have to undo the changes myself.

Sure, there are a few places where Family.Show uses an OK and Cancel button pair, but they're mostly about creating new objects, where the "Cancel" action isn't rolling anything back - it's just not adding the new object to the collection.

I can totally see why you'd go down this route. The "docked panel" approach is just so nice-looking, and doesn't jar the user away from the safe haven of the main window. And if I'm in the editing process and realise I'm looking at the wrong object, there's no "cancel" - I just click on the object I did want to edit, and data binding takes care of everything for me.

So ... is IEditableObject dead? Does anyone use it any more? Are modal dialogs truly going the way of the dodo?

I don't have any answers. What do you think?