Gibt es eine Möglichkeit, Fehler manuell/dynamisch zur Sammlung Validation.Errors hinzuzufügen?
Antworten
Zu viele Anzeigen?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);
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);
}
}