Wir verwenden die Standardmethode für unsere Kontrollen, um gebrochene BO-Regeln zu melden. Dies geschieht über die Schnittstelle IDataError in unseren BOs und in XAML ist das Steuerelement an die BO-Eigenschaft usw. gebunden. Diese Vorgehensweise funktioniert in Ordnung. Aber wir müssen 2 Arten von Visualisierungen in der Benutzeroberfläche anzeigen, abhängig vom Typ (oder der Kategorie, wenn Sie möchten) des Ungültigkeitsfehlers. Wenn es ein Pflichtfeld ist, zeigen wir einen CueBanner (Wasserzeichen), aber bei anderen Typen ändern wir die Farbe der Steuergrenze. In beiden Szenarien legen wir den Werkzeugtyp der Fehlermeldung fest.Ist dies ein verrückter Weg, um mehrere Validierungstypen mit IDataError und WPF zu behandeln?
Das Problem mit IDataError ist, dass es keine Methode/Eigenschaft unterstützt, um zwischen Fehlertypen zu unterscheiden.
Die einzige Möglichkeit, die ich tun kann, besteht darin, den Fehlertext zu untersuchen, erforderlicher Feldtext muss das Schlüsselwort "erforderlich" enthalten. Der folgende Ansatz fühlt sich nicht richtig an, aber es ist der einzige Weg, wie ich die Art des Fehlers bestimmen und dann entsprechend behandeln kann. Alle erforderlichen Feldregeln müssen als Teil des Fehlertexts "erforderliches Feld" enthalten sein. Um dies alles funktionieren zu lassen, habe ich eine benutzerdefinierte Abhängigkeitseigenschaft namens ErrorMessage erstellt. In meinem ResourceDictionary habe ich einen Style.Trigger für Validation.HasError. Dort habe ich den Wert meiner Abhängigkeitseigenschaften auf den ErrorContent gesetzt. Jetzt, wenn sich der Wert meiner Abhängigkeitseigenschaften ändert, kann ich den Text untersuchen und die Validation.SetErrorTemplate (myControl, newErrorTemplate) entsprechend dem Fehlertyp auf die Vorlage setzen. Ich muss ein paar Ereignisse an die Steuerung übertragen, wie zum Beispiel "lost", und den Fokus auf das Entfernen oder Hinzufügen der cueBanner-Vorlage richten, aber die ganze Sache wird funktionieren. Ich bin mir nur nicht sicher, ob das der beste Weg ist.
PS. Wenn ich das ErrorTemplate setze, mache ich das im Code, der das baut und hinzufügt. Gibt es eine Möglichkeit, Validation.SetErrorTemplate auf eine statische Ressource zu verweisen, wobei zu beachten ist, dass ich zwischen mindestens zwei Typen wechseln muss? bitte
Ihre Gedanken ..
Ich glaube nicht, dass die zusätzliche Eigenschaft von der Fehler-Vorlage aus zugänglich ist. Der DataContext der ErrorTemplate ist die Validation.Errors-Auflistung. –