When you a set a property's value, you can either validate before or after updating the internal value.
If validating before, you could throw an exception if the new value is invalid. The object is then always in a valid state.
If validating after, undo is desired (i.e. via IEditableObject), so the user can cancel the edit any time. We also have the option of either throwing an exception here or expose errors via IDataErrorInfo.
I don't think IDataErrorInfo makes sense if validating before the set. Some also may argue throwing an Exception is not warranted in validation scenarios.
Validating after works great in scenarios where the custom object is contained in BindingList and set as datasource to a grid.
Validating before works ok with grids too but you kind of have to throw an exception in order to signal the setting of the property value failed to the data grid (without a lot of extra code)
I am also not comfortable with my domain objects implementing IEditableObject and IDataErrorInfo, INotifyPropertyChanged, etc. It leaves the domain object cluttered with extra concerns. But it seems unavoidable if you want to place nice with databinding. I could create a wrapper, DTO perhaps, but I'm not too crazy about having to write mostly dummy extra code just to support these databinding bits.
How do you validate objects (preferrably in the context of databinding and UI)?