2010-04-15 9 views
7

mam kontrolę z tej walidacjiWPF ValidationRule Waliduj gdy kontrola jest ładowany

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

Jest to klasa Walidacja:

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; 
    } 
} 
} 

Pytanie: Gdy właściwość zostanie zmieniona, wówczas Walidacja () metoda jest wywoływana, co jest poprawne.

Ale aby wywołać tę metodę na samym początku , kiedy tworzony jest MyControl? Muszę udowodnić natychmiastowe po initialize jeśli istnieje wartość null w kontroli (i wyświetla błąd sprawdzania poprawności)

Odpowiedz

16

OK I został rozwiązany go: wymusić sprawdzanie poprawności, gdy element został związany z prostym nieruchomości - ValidatesOnTargetUpdated:

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

Twoja odpowiedź jest wielki ... chcę tylko powiedzieć.

Mam wiele kontroli do sprawdzenia poprawności i tak wiele reguł, więc to, co zrobiłem, to tworzenie konstruktora w mojej klasie validationRule i ustawienie ValidatesOnTargetUpdated na True.

W ten sposób nie muszę przeglądać wszystkich stron i elementów sterujących, aby dodać tę właściwość do reguły sprawdzania poprawności.

Examlpe

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

public class MyRule2 : MyRule 
{ 
    public MyRule2() : base() { } 
    ... 
} 
Powiązane problemy