2011-03-31 5 views
1

Il semble que quelqu'un d'autre est d'avoir cette question: Validation.HasError does not trigger again if new error comes in while already trueIDataErrorInfo avec des messages d'erreur multiples pour un bien

Le Validation.Error n'est pas mise à jour avec le dernier message d'erreur.

Il montre l'erreur précédente et non celle qui a été appelée en dernier. Lorsque je consigne chaque retour, PropertyX est supérieur à ou PropertyX est inférieur à ce qui est retourné, mais il n'affiche pas ce message dans mon info-bulle. Il affichera "Obligatoire".

J'ai également trouvé que mon convertisseur pour l'info-bulle n'est pas appelé lorsque PropertyX est supérieur à ou PropertyX est inférieur à ce qui est retourné.

Voici le code de validation:

string this[string columnName] 
    { 
     get 
     { 
      switch(columnName) 
      { 
       case "Property1": 
        int output; 
        if (true == string.IsNullOrEmpty(this.Property1)) 
        { 
         return "Required"; 
        } else if (true == int.TryParse(this.Property1, out output)) 
        { 
         return "Invalid integer"; 
        } else if (true == this.Property1Int.HasValue && 
        true == this.Property2Int.HasValue) 
        { 
         if (this.Property1Int.Value < this.Property2Int.Value) 
         { 
          return "Property2 is greater than Property1"; 
         } 
        } 

        break; 
       case "Property2": 
        int output; 
        if (true == string.IsNullOrEmpty(this.Property2)) 
        { 
         return "Required"; 
        } else if (true == int.TryParse(this.Property2, out output)) 
        { 
         return "Invalid integer"; 
        } else if (true == this.Property1Int.HasValue && 
        true == this.Property2Int.HasValue) 
        { 
         if (this.Property2Int.Value > this.Property1Int.Value) 
         { 
          return "Property2 is greater than Property1"; 
         } 
        } 

        break; 
      }; 

      return string.Empty; 
     } 
    } 

Que se passe-t-il?

+0

Il est probablement impossible, parce que si elle a été autorisée comme dans Silverlight, nous avons une méthode qui renvoie IEnumerable et pas une seule chaîne. – vorrtex

+0

duplication possible de [Validation.HasError ne se déclenche plus si une nouvelle erreur est présente alors que c'est déjà vrai] (http://stackoverflow.com/questions/4606509/validation-haserror-does-not-trigger-again-if-new- error-come-in-while-already-tr) – kevindaub

+0

Pouvez-vous ajouter comment vous lier cette erreur? Est-ce la même chose qu'une copie? – Euphoric

Répondre

3

Si vous utilisez un convertisseur comme dans d'autres questions, je suis sûr qu'il n'est pas la meilleure façon de faire les choses. Spécialement dans l'enviorment dynamique comme WPF.

Je recommanderai lier à (Validation.Errors).CurrentItem directement au lieu d'utiliser le convertisseur comme décrit ici:

http://joshsmithonwpf.wordpress.com/2008/10/08/binding-to-validationerrors0-without-creating-debug-spew/

+0

C'est le chemin que j'ai commencé à descendre quand j'ai réalisé que HasError mettait à jour le trigger. Dommage que la plupart des gens utilisent le déclencheur au lieu de cette façon. Cela empêcherait un peu de chagrin d'amour avec WPF. – kevindaub

Questions connexes