2010-08-25 7 views
0

J'ai un bouton lié à la propriété Validation.HasError d'un bloc de texte. Le bloc de texte a une règle de validation qui vérifie la valeur entrée par l'utilisateur. Le but de la liaison est que le bouton soit désactivé si l'utilisateur entre une mauvaise donnée.La liaison se produit avant la validation

Le problème est que la ValidationRule s'exécute APRÈS la liaison. Ainsi, lorsque l'utilisateur tape une valeur incorrecte, la liaison vérifie la propriété HasError du bloc de texte, qui est FALSE, de sorte que le bouton est activé. Et puis la validationrule s'exécute. Il en résulte une situation inverse dans laquelle le bloc de texte est invalide et le bouton est activé.

Comment est-ce que je pourrais spécifier lequel (la liaison et la validation) s'exécute en premier?

Voici le XAML:

<MultiBinding Converter="{StaticResource ButtonVisibilityConverter}" UpdateSourceTrigger="PropertyChanged" Mode="OneWay" > 
    <Binding ElementName="integerInput" Path="HasValidationError"/> 
    <Binding ElementName="doubleInput" Path="HasValidationError"/> 
    </MultiBinding> 

</Button.IsEnabled> 

Je suis sûr que ce n'est pas le cas. Le contrôle de bloc de texte dont je parle est un spinner personnalisé (zone de texte avec deux boutons +/-). Le contenu du spinner est lié à une propriété dans le viewmodel. Chaque fois que l'on clique sur le bouton + ou - une commande est exécutée et incrémente ou décrémente la valeur dans la zone de texte.

Répondre

1

Quel XAML utilisez-vous pour lier le bouton à la zone de texte? Toute modification de la propriété HasError doit déclencher la réévaluation de la liaison sur le bouton, quelle que soit la phase de validation. Etes-vous sûr que votre problème n'est pas que lorsque la propriété HasErrors est fausse, vous voulez que la propriété IsEnabled soit vraie et que vous n'inversiez pas la valeur dans la liaison?

Questions connexes