Ostatnio przedstawiłem sposób konfiguracji i wykorzystania biblioteki NHibernate.Validator w aplikacji Windows Forms. Po wypełnieniu formularza użytkownik otrzymywał jedynie informację, iż jest on wypełniony poprawnie/niepoprawnie.

Warto byłoby oznaczyć błędnie wypełnione pola. W tym celu wykorzystam komponent ErrorProvider. Aby nie pisać wszystkiego od początku, wykorzystam odrobinę zmodyfikowany projekt NHibernate.Validator.Binding.

Modyfikacja polega na dodaniu settera dla właściwości ValidatorEngine w klasie NHibernate.Validator.Binding.ViewValidator. Integrację walidatora z konkretnym ErrorProviderem i skonfigurowanym poprzednio silnikiem ValidatorEngine zapewni helper:

public class ValidationHelper
{
    public static SmartViewValidator CreateValidator(ErrorProvider errorProvider)         
    {
        return new SmartViewValidator(errorProvider)
               {
                    ValidatorEngine = Environment.SharedEngineProvider.GetEngine()
               };
    }
}

W klasie formularza powołujemy do życia obiekt SmartViewValidator:

SmartViewValidator validator = ValidationHelper.CreateValidator(errorProvider1);
validator.Bind(typeof (User))
         .With(txtFirstName)
         .With(txtLastName)
         .With(txtAge);

Klasa SmartViewValidator zakłada, iż w nazwie kontrolki musi występować nazwa właściwości. Teraz tworzymy funkcję sprawdzającą poprawność wprowadzonych danych:

private bool Valid(User user)
{
    return ValidateChildren() && validator.ValidatorEngine.IsValid(user);
}

Na koniec sprawdzamy poprawność wprowadzonych danych:

User userToValidate = GetUserFromUI();
if (Valid(userToValidate))
{
    MessageBox.Show("Formularz wypełniony prawidłowo!");
}