personaly, i'm using exceptions to handle validation. it requires following steps:
- in your data binding expression, you need to add "ValidatesOnException=True"
- in you data object you are binding to, you need to add DependencyPropertyChanged handler where you check if new value fulfills your conditions - if not - you restore to the object old value (if you need to) and you throw exception.
- in your control template you use for displaying invalid value in the control, you can access Error collection and display exception message.
the trick here, is to bind only to objects which derive from DependencyObject. simple implementation of INotifyPropertyChanged wouldn't work - there is a bug in the framework, which prevents you from accessing error collection.