Validation.HasError est une propriété attachée de sorte que vous pouvez vérifier pour textboxMin comme celui-ci
void buttonOK_Click(object sender, RoutedEventArgs e)
{
if (Validation.GetHasError(textboxMin) == true)
return;
}
Pour exécuter tous ValidationRules pour le TextProperty dans le code derrière vous pouvez obtenir le BindingExpression et appelez UpdateSource
BindingExpression be = textboxMin.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
Mise à jour
Il prendra des mesures pour réaliser la liaison à disab le bouton si une validation a lieu. Tout d'abord, assurez-vous que toutes les liaisons ajoutent NotifyOnValidationError = "True". Exemple
<TextBox Name="textboxMin">
<TextBox.Text>
<Binding Path="Max" NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:IntValidator/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Ensuite, nous brancher un gestionnaire d'événements à l'événement Validation.Error dans la fenêtre.
<Window ...
Validation.Error="Window_Error">
Et dans le code derrière nous ajoutons et supprimons les erreurs de validation dans un ObservableCollection comme ils viennent et aller
public ObservableCollection<ValidationError> ValidationErrors { get; private set; }
private void Window_Error(object sender, ValidationErrorEventArgs e)
{
if (e.Action == ValidationErrorEventAction.Added)
{
ValidationErrors.Add(e.Error);
}
else
{
ValidationErrors.Remove(e.Error);
}
}
Et nous pouvons lier IsEnabled du bouton à ValidationErrors.Count comme celui-ci
<Button ...>
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ValidationErrors.Count}" Value="0">
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Est-ce que vous devez savoir si une erreur a ValidationRule spécifique ou tout simplement si la zone de texte contient des erreurs? –