2010-11-07 3 views
7

J'utilise WPF avec le modèle MVVM et je démarre un très gros projet.Comment utiliser les règles de validation de modèle dans WPF ViewModel

Pour garder les soucis séparés, je veux mettre toutes mes règles de validation dans mes modèles de données.

Mais quand je revois comment faire la validation WPF, tous les exemples que je peux trouver montrent comment le faire avec le ViewModel contenant les règles de validation. Certains de ces exemples montrent une réelle compréhension profonde de WPF et sont très cool.

Dans cette application particulière, j'ai un mappage 1: 1 entre les ViewModels qui éditent et modélisent, donc je pourrais le mettre dans les ViewModels. Mais ça ne me semble pas juste.

Répondre

3

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.

Questions connexes