2010-04-15 21 views
7

tengo un control con esta validaciónWPF ReglaDeValidación Validar cuando se carga el control de

<MyPicker.SelectedItem> 
<Binding Path="Person.Value" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True"> 
    <Binding.ValidationRules> 
    <rules:MyValidationRule ValidationType="notnull"/> 
    </Binding.ValidationRules> 
</Binding> 
</MyPicker.SelectedItem> 

Ésta es la clase de validación:

class MyValidationRule : ValidationRule 
{   
private string _validationType; 
public string ValidationType 
{ 
    get { return _validationType; } 
    set { _validationType = value; } 
} 

public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
{    
    ValidationResult trueResult = new ValidationResult(true, null); 

    switch (_validationType.ToLower()) 
    { 
    case "notnull": return value == null ? new ValidationResult(false, "EMPTY FIELD") : trueResult;    
    default: return trueResult; 
    } 
} 
} 

Pregunta: Cuando se cambia la propiedad, entonces el validar () se llama método que es correcto.

¿Pero para llamar a este método desde el principio cuando se crea MyControl? Necesito probar inmediata después de inicialización si el que hay un valor nulo en el control (y mostrar un error de validación)

Respuesta

16

Aceptar He resuelto que: fuerza la validación cuando el elemento quedó atado con una simple propiedad - ValidatesOnTargetUpdated:

<rules:MyValidationRule ValidatesOnTargetUpdated="True" ValidationType="notnull"/> 
1

Su respuesta es grande ... Sólo quiero decir esto.

Tengo tantos controles para validar y tantas reglas, así que lo que hice fue crear un constructor en mi clase validationRule y establecer el ValidatesOnTargetUpdated en True allí.

De esta manera no tengo que pasar por todas mis páginas y controles para agregar esta propiedad a la regla de validación.

examlpe

public class MyRule : ValidationRule 
{ 
    public MyRule() : base() { ValidatesOnTargetUpdated = true; } 
    ... 
} 

public class MyRule2 : MyRule 
{ 
    public MyRule2() : base() { } 
    ... 
} 
Cuestiones relacionadas