14 Stimmen

WPF Validierung Manuelles Hinzufügen von Fehlern in Validation.Errors Sammlung

Gibt es eine Möglichkeit, Fehler manuell/dynamisch zur Sammlung Validation.Errors hinzuzufügen?

25voto

jrwren Punkte 17025

Von http://www.wpftutorial.net/ValidationErrorByCode.html

ValidationError validationError = new ValidationError(regexValidationRule, 
    textBox.GetBindingExpression(TextBox.TextProperty));

validationError.ErrorContent = "This is not a valid e-mail address";

Validation.MarkInvalid(
    textBox.GetBindingExpression(TextBox.TextProperty), 
    validationError);

2voto

Bill Tarbell Punkte 4498

Die Antwort von jrwren führte mich in die richtige Richtung, war aber nicht sehr klar, was regexValidationRule war und wie man den Validierungsfehler löscht. Hier ist das Endergebnis, mit dem ich aufgewachsen bin.

Ich habe mich für die Verwendung von Tag entschieden, da ich diese manuelle Validierung in einer Situation verwendet habe, in der ich weder ein Viewmodel noch Bindungen verwendet habe. Dies gab etwas, das ich binden konnte, ohne sich Gedanken über die Ansicht zu beeinträchtigen.

Hinzufügen einer Bindung im Code dahinter:

private void AddValidationAbility(FrameworkElement uiElement)
{
  var binding = new Binding("TagProperty");
  binding.Source = this;

  uiElement.SetBinding(FrameworkElement.TagProperty, binding);
}

und einen Validierungsfehler auslösen, ohne IDataError zu verwenden:

using System.Windows;
using System.Windows.Controls;

    private void UpdateValidation(FrameworkElement control, string error)
    {
      var bindingExpression = control.GetBindingExpression(FrameworkElement.TagProperty);

      if (error == null)
      {
        Validation.ClearInvalid(bindingExpression);
      }
      else
      {
        var validationError = new ValidationError(new DataErrorValidationRule(), bindingExpression);
        validationError.ErrorContent = error;
        Validation.MarkInvalid(bindingExpression, validationError);
      }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X