2011-07-28 13 views
6

¿es posible usar System.ComponentModel.DataAnnotations y su atributo pertenecer (como Required, Range, ...) en la clase WPF o Winforms?Cómo usar System.ComponentModel.DataAnnotations en la aplicación WPF o Winforms

Quiero poner mi validación a las atribuciones.

gracias

EDIT 1:

escribo esto:

public class Recipe 
{ 
    [Required] 
    [CustomValidation(typeof(AWValidation), "ValidateId", ErrorMessage = "nima")] 
    public int Name { get; set; } 
} 

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     var recipe = new Recipe(); 
     recipe.Name = 3; 
     var context = new ValidationContext(recipe, serviceProvider: null, items: null); 
     var results = new List<System.ComponentModel.DataAnnotations.ValidationResult>(); 

     var isValid = Validator.TryValidateObject(recipe, context, results); 

     if (!isValid) 
     { 
      foreach (var validationResult in results) 
      { 
       MessageBox.Show(validationResult.ErrorMessage); 
      } 
     } 
    } 

public class AWValidation 
{ 
    public bool ValidateId(int ProductID) 
    { 
     bool isValid; 

     if (ProductID > 2) 
     { 
      isValid = false; 
     } 
     else 
     { 
      isValid = true; 
     } 

     return isValid; 
    }   
} 

pero incluso me puse a 3 mi propiedad nada sucedió

+0

Pregunta duplicada en: http://stackoverflow.com/questions/1755340/validate-data-using-dataannotations-with-wpf-entity-framework – Raghu

Respuesta

8

Sí, you can. Y aquí está another article que ilustra esto. Usted puede hacer esto incluso en una aplicación de consola mediante la creación manual de un ValidationContext:

public class DataAnnotationsValidator 
{ 
    public bool TryValidate(object @object, out ICollection<ValidationResult> results) 
    { 
     var context = new ValidationContext(@object, serviceProvider: null, items: null); 
     results = new List<ValidationResult>(); 
     return Validator.TryValidateObject(
      @object, context, results, 
      validateAllProperties: true 
     ); 
    } 
} 

ACTUALIZACIÓN:

He aquí un ejemplo:

public class Recipe 
{ 
    [Required] 
    [CustomValidation(typeof(AWValidation), "ValidateId", ErrorMessage = "nima")] 
    public int Name { get; set; } 
} 

public class AWValidation 
{ 
    public static ValidationResult ValidateId(int ProductID) 
    { 
     if (ProductID > 2) 
     { 
      return new ValidationResult("wrong"); 
     } 
     else 
     { 
      return ValidationResult.Success; 
     } 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
     var recipe = new Recipe(); 
     recipe.Name = 3; 
     var context = new ValidationContext(recipe, serviceProvider: null, items: null); 
     var results = new List<ValidationResult>(); 

     var isValid = Validator.TryValidateObject(recipe, context, results, true); 

     if (!isValid) 
     { 
      foreach (var validationResult in results) 
      { 
       Console.WriteLine(validationResult.ErrorMessage); 
      } 
     } 
    } 
} 

en cuenta que el método ValidateId debe ser pública estático y devuelve ValidationResult en lugar de booleano. También observe un cuarto argumento pasado al método TryValidateObject que debe establecerse en verdadero si desea que se evalúen sus validadores personalizados.

+0

Agradable, +1 para la referencia del artículo. –

+0

Gracias pero no entiendo su código correctamente. ¿Cómo funciona el código? Y para qué? Deseo cuando el Ejemplo Filed1 tiene el valor 2 y el mensaje de error devuelve – Arian

+0

Consulte mi Editar 1 – Arian

Cuestiones relacionadas