Here is what I have:
In the view there is a tab control with two tabs (sys1 and sys2) each with the same textboxes that are bound to the properties of their respective entities:
sys1:
<TextBox Text="{Binding sys1.Serial, ValidatesOnExceptions=True, NotifyOnValidationError=True}" />
sys2:
<TextBox Text="{Binding sys2.Serial, ValidatesOnExceptions=True, NotifyOnValidationError=True}" />
Using some form of validation I would like to compare the two values and display an error (red border is fine) if the values don’t match.
I’ve used IDataErrorInfo before, but I’m not sure if this type of validation is possible.
Note: whether or not binding directly to the entity is “correct” is a discussion for another place and time. Just know that this is a team project and our teams standards are to bind to the entity so I can’t change that unless I have a good reason. Perhaps if it’s not possible validating when bound directly to the entity then I may have a good enough reason to change this.
Thanks
I usually expose a Validation Delegate from my Model that my ViewModel can use to attach business-rule validation to the Models.
For example, the ViewModel containing your objects might look like this:
The idea is that your
Modelshould only contain raw data, therefore it should only validate raw data. This can include validating things like maximum lengths, required fields, and allowed characters. Business Logic, which includes business rules, should be validated in theViewModeland this allows that to happen.The actual implementation of my
IDataErrorInfoon theModelclass would look like this:P.S. I see nothing wrong with binding directly to the Model, especially in smaller applications. It may not be the “MVVM-purist” approach, however it is efficient and a lot less work, so I find it a perfectly valid option.