Ich bekomme manchmal die Notwendigkeit für diesen Mittelweg. Wie Command
s, die 3 Werte von CanExecute
anstatt true
oder false
benötigen.
Wie für Warnungen, die wie Validierung funktionieren, ich weiß nicht alle Stücke, die man zusammensetzen müsste, aber ich denke, ich weiß, wie man anfangen würde.
Sie müssen sich auf angefügte Eigenschaften und angehängte Verhaltensweisen verlassen (angefügte Eigenschaften, die Ereignisse für das Objekt abonnieren und Vorgänge ausführen, die sich auf diese Ereignisse beziehen, wenn sie ausgelöst werden). Möglicherweise verfügen Sie über einen, der eine Sammlung von ValidationRule
Objekten verwaltet, die verwendet werden, um festzustellen, ob eine Warnung ausgegeben wird oder nicht, ähnlich wie die Eigenschaften Validation
. Möglicherweise haben Sie einen Namen mit der Bezeichnung HasWarning
, der von der Validierung, auf die in Stil-/Vorlagen-Triggern verwiesen werden kann, gesetzt oder deaktiviert wird.
Sie könnten die Warnanzeige Teil jeder Vorlage Kontrolle machen, oder man kann wieder nachahmen Validation
und haben eine WarningTemplate
angebrachte Eigenschaft, die die Warnhinweise in einem AdornerLayer
Ort verwendet wird.
Da benutzerdefinierte ValidationRule
Objekte zurückgeben ein ValidationResult
Objekt, in dem die ErrorContent
ist einfach ein Objekt, und das Objekt auch in den ValidationError
Objekte als ErrorContent
ausgesetzt ist, können Sie auch die regelmäßige Überprüfung, nachdem alle nutzen können. Sie könnten möglicherweise eine Klasse als Ihr ErrorContent
Objekt verwenden, das eine ErrorType
Eigenschaft der Warnung oder des Fehlers hat und an das in Ihrer ErrorTemplate
binden.
Ich bin nicht sicher, ob das Vorhandensein von ValidationError
s bestimmte Vorgänge (wie das Drücken von Tasten) verhindern würde, aber eine Art Proxy für das ViewModel könnte erstellt werden, das die ErrorType
beurteilt.
+1 für die Beobachtung, dass 'ErrorContent' ein Objekt, keine Zeichenfolge ist. Dies ist eine sehr einfache Möglichkeit, dies zu erreichen. Sie erstellen einfach eine Nachrichtenklasse mit Fehler-, Warnungs- und Informationsunterklassen sowie eine 'DataTemplate' für jeden Typ. –