La validation en utilisant IDataErrorInfo
(Si c'est ce que vous utilisez) se produira sur l'objet lié à la vue.
donc si vous avez
<TextBox Text="{Binding Name}" />
ce sera sur le ViewModel. Toutefois, si vous exposez le modèle en tant que propriété sur le modèle de vue, la validation aura lieu sur votre modèle de données.
<TextBox Text="{Binding Model.Name}" />
Avec le premier choix, vous pouvez lier aux propriétés du modèle de vue et route vers le modèle de données où il contient la validation réelle, puis juste mettre en œuvre IDataErrorInfo
sur le modèle de vue et de la voie de la validation du modèle
ViewModel:
public string this[string propname]
{
get { return _model[propname]; }
}
Ceci est utile que si vous avez réellement définir les propriétés requises sur le modèle de validation pour travailler
ViewModel:
public string SomeProperty
{
get { reutrn _model.SomeProperty; }
set {
_model.OtherProperty = value;
RaisePropertyChanged("SomeProperty");
}
}
Cependant, je préfère la deuxième option de liaison becasuse le problème est qu'il ne soit pas très sec, donc j'exposerons presque toujours le DataModel comme une propriété sur le modèle de vue (comme c'est responsable des données) et laisser ViewModel gérer le modèle pour la vue, qui est plus sur la façon dont l'interface utilisateur interagit avec les données.
Dans des scénarios très complexes, il peut être préférable de séparer la validation du modèle et du modèle de vue et de faire en sorte que le modèle de vue et le modèle de données le consomment.