2009-09-24 8 views
0

J'ai récemment corrigeait la validation NHibernate dans mon application, j'ai décoraient les propriétés de mes objets de domaine avec les attributs NHibernate comme si ...WPF IDataErrorInfo et NHibernate Validation - comment déclencher une validation?

[NotEmpty, Length(Min = 1, Max = 40)] 
    public string Description { get; set; } 

J'ai également mis en IDataErrorInfo sur mon objet de domaine .. .

public string this[string columnName] 
    { 
     get 
     { 
      var result = new ValidatorEngine().Validate(this); 
      _invalidValues = result.Where(x => x.PropertyName == columnName).Select(x => x.Message); 
      return _invalidValues.FirstOrDefault(); 
     } 

    } 

    public string Error 
    { 
     get 
     { 
      return string.Empty; 
     } 
    } 

Le XAML ressemble à ceci

<TextBox Grid.Row="0" Grid.Column="3" Text="{Binding Path=Entity.Description, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" IsEnabled="{Binding IsEditable}" ></TextBox> 

mon problème est que lorsque je crée une nouvelle instance de mon obj de domaine ect alors le validate n'est pas appelé, comme effectivement les propriétés (telles que la description dans mon exemple) n'ont pas changé. J'allais écrire une méthode pour utiliser la réflexion et mettre les propriétés à ce qu'elles sont déjà égales afin de déclencher la validation, mais ce dosnt semble une approche particulièrement efficace !!

Quelqu'un peut-il me remettre sur les rails, s'il vous plaît?

Cheers,

Andy

Répondre

1

C'était parce que les propriétés étaient nulles et je besoin d'un autre décorateur de validation NHibernate pour tenir compte des (NotNullNotEmpty) plutôt que NotEmpty que j'avais utilisé.

[NotNullNotEmpty, Length(Min = 1, Max = 40)] 
public string Description { get; set; } 
Questions connexes