1. Mixing the different source of errors
Yes you can mix the three kind of Validation you quote :
ValidationRules
are fine for GUI(surface) validation
IDataErrorInfo
is implemented on the view model/business object. It is fine for more business oriented validation
INotifyDataErrorInfo
is also implemented on the view model/business object. It adds possibility of multiple errors on a given field and also adds asynchronous validations (i.e. a server or a thread can take time to answer to the valildation).
That last source of error is really more longer to implement
2. Taking errors into account
The most difficult is to take into account the different sources of error when you want to prevent a window from being closed if data is not valid.
ValidationRules error must be looked up in the GUI bindings, because the invalid data doesn't get to the business object/ViewModel.
IDataErrorInfo
and INotifiDataErrorInfo
can be looked in the ViewModel layer.
Regards