2010-11-07 8 views
7

Estoy usando WPF con el patrón MVVM y estoy comenzando un proyecto muy grande.Cómo usar las reglas de validación del modelo en WPF ViewModel

Para mantener las preocupaciones separadas, quiero poner todas mis reglas de validación en mis modelos de datos.

Pero cuando reviso cómo hacer la validación de WPF, todos los ejemplos que puedo encontrar muestran cómo hacerlo con ViewModel que contiene las reglas de validación. Algunos de estos ejemplos muestran una verdadera comprensión profunda de WPF y son geniales.

En esta aplicación en particular, tengo un mapeo 1: 1 entre los ViewModels que se editan y los modelos, así que podría ponerlo en ViewModels. Pero simplemente no se siente bien.

Respuesta

3

La validación usando IDataErrorInfo (si eso es lo que está utilizando) ocurrirá en el objeto que está vinculado a la Vista.

por lo que si usted tiene

<TextBox Text="{Binding Name}" /> 

esto estará en el modelo de vista. Sin embargo, si expone el modelo como una propiedad en el modelo de vista, la validación se realizará en su modelo de datos.

<TextBox Text="{Binding Model.Name}" /> 

Con la primera opción, se puede enlazar a las propiedades de vista del modelo y la ruta al modelo de datos donde se contiene la validación real, a continuación, sólo implementar IDataErrorInfo en el modelo de vista y la ruta de la validación al modelo

modelo de vista:

public string this[string propname] 
{ 
    get { return _model[propname]; } 
} 

Esto es útil sólo si en realidad se configuran las propiedades necesarias en el modelo para la validación de trabajar

modelo de vista:

public string SomeProperty 
{ 
    get { reutrn _model.SomeProperty; } 
    set { 
      _model.OtherProperty = value; 
      RaisePropertyChanged("SomeProperty"); 
     } 
} 

Sin embargo, yo prefiero la segunda opción de unión becasuse el problema con esto es que no es muy seco, por lo que casi siempre voy a exponer a la DataModel como una propiedad en el modelo de vista (ya que es responsable de los datos) y dejar ViewModel administrando el modelo para la vista, que es más acerca de cómo la interfaz de usuario interactúa con los datos.

En escenarios muy complejos, puede ser mejor separar la validación del modelo y el modelo de vista y tener tanto el modelo de vista como el modelo de datos consumiéndolo.

Cuestiones relacionadas