2009-05-07 4 views
2

Ich habe einen Validator für die Text-Eigenschaft eines Textblocks festgelegt. Für eine korrekte Validierung würde ich die Eltern-Benutzer-Kontrolle des Textblocks benötigen, aber die einzigen Dinge, die ich im Validator habe, sind das Wertobjekt (eine Zeichenkette) und die Kultur (hilft auch nicht).Get UserControl oder VisualTree in DataValidation von TextBlock

Kennt jemand eine Möglichkeit, bestimmte Benutzersteuerelemente in einer Klasse/einer Methode zu erhalten, wo ich keinen Zugriff auf irgendeine Art von visuellen oder Kontrolle meiner Anwendung habe.

Das Problem lösen könnte, wenn ich dem Validator die Usercontrol oder den Textblock als Parameter geben könnte, aber ich finde nicht, einen Weg, dies zu tun ..

+0

EDIT: Ich löste das Problem mit all den Sachen, die ich brauche Daten für in einem Konverter und setzen alle Daten Logik aus dem Validator. – dalind

Antwort

1

Sie könnten versuchen, in mit zwei Validierungseigenschaften Validierung gebaut die Binding Klasse: ValidatesOnExceptions und ValidatesOnDataErrors.

Mit ValidatesOnExceptions ist die Bindung ungültig, wenn während des Konvertierungsprozesses eine Ausnahme ausgelöst wird. In diesem Fall könnten Sie einen benutzerdefinierten Konverter erstellen, das Benutzersteuerelement als Parameter übergeben und dann eine Ausnahme im Konverter auslösen, wenn die Bindung ungültig ist.

<Binding ValidatesOnExceptions="True"/> 

Mit ValidatesOnDataErrors ist die Bindung ungültig, wenn die Quelle IDataErrorInfo implementiert und gibt eine Nicht-null/leere Zeichenfolge für die IDataErrorInfo.Error Eigenschaft. Wenn Ihre Quelle diese Schnittstelle implementiert oder diese implementieren könnte, könnten Sie die Daten auf der Quellseite validieren.

<Binding ValidatesOnDataErrors="True"/> 
+0

Das Problem ist, dass ich im Validator nicht genug Daten habe (die von der Benutzersteuerung bereitgestellt werden), um die Daten korrekt zu validieren. Diese beiden Validierungen helfen mir nicht herauszufinden, ob die Daten korrekt sind oder nicht. In der IDataErrorInfo erhalte ich auch nicht mehr Daten als die Zeichenfolge des Textblocks, was leider nicht ausreicht, um meine Daten zu validieren. – dalind

+0

Können Sie nicht einen benutzerdefinierten Konverter erstellen und dem Konverter die Benutzersteuerung übergeben, die Sie benötigen? Konverter dürfen im Bindeprozess Argumente erhalten. Es scheint, dass Validatoren nicht sind. –

+0

Idealerweise würde ich vorschlagen, einen Wrapper für Ihr Modell (ein ViewModel) zu erstellen, der die erforderlichen Eigenschaften und Dienste enthält, um die Überprüfung selbst durchzuführen (und validiert dann die Bindung über IDataErrorInfo). –

Verwandte Themen