2012-04-10 5 views
0

Ich habe eine Ansicht mit einem Textfeld an eine Doppel-Eigenschaft in einem Viewodel gebunden. WPF oder MVVM oder was auch immer ist nett genug, um eine visuelle Anzeige für den Benutzer anzuzeigen (roter Kasten um die Steuerung), wenn sie ungültige Daten in die Textbox eingeben. Invalida-Daten bedeuten in diesem Fall Daten, die nicht in ein Double konvertiert und mit der Eigenschaft des Viewmodels synchronisiert werden können.Textfeld Text gebunden an Viewmodel Eigenschaft - Erkennung ungültigen Datenzustand der Ansicht

was ich tun möchte, ist zu erkennen, wenn die Steuerelemente der Ansicht Daten haben, die sie nicht mehr verbindlich sein. Ich weiß, ich könnte limit what the user can type in via code behind, aber ich bin mir nicht sicher, ob ich das tun will.

Ich weiß auch, dass ich eine Steuerdatenvalidierungsmethode erstellen konnte, die validieren würde, dass alle Steuerelemente vom erforderlichen Datentyp sind, aber ich würde das lieber nicht tun, wenn ich muss.

Gibt es eine intelligente und einfache Möglichkeit, XAML mitzuteilen, Benutzereingaben zu verbieten, die zu verbindlichen Problemen führen würden?

Was ist die Bindungseigenschaft des Textfelds, deren Status das rote Feld um das Steuerelement herum verursacht, oder besser noch, wie kann ich den fehlgeschlagenen Bindungsstatus des Textfelds ermitteln?

gibt es einen umfassenden Aufruf, den ich an eine gesamte Ansicht/Fenster/Layout/Panel vornehmen könnte, die alle Bindungen rekursiv überprüfen würde, um sicherzustellen, dass ihre Daten mit dem Viewmodel synchronisiert und daher gültig sind, oder einige Objekte nicht synchron sind und ungültig, oder nur eine Bindung ist nicht wegen der Ungültigkeit einiger der gebundenen Daten passiert?

ein Gedanke kommt mir gerade jetzt vor. Wenn das Ansichtsmodell für die Ansicht erstellt wird, sollte ich Zeichenketten mit Eigenschaften wie Höhe und Breite erstellen? um gültig zu sein, müssen sie doppelt sein, aber dies sind Werte, die der Benutzer eingeben kann. Dies würde mir erlauben, die Eigenschaft auf die gleiche Weise zu validieren, wie ich den Rest des Objektstatus validiere.

meine letzte Offenbarung beiseite, jemand haben einige heiße Tipps zu den Fragen, die ich hier habe?

Danke Profis.

Antwort

0

Ich verwende String-Typ für meine Eigenschaften und die IDataErrorInfo, um die Eingabe zu überprüfen. Das Gute daran ist, dass es keine verbindlichen Ausnahmen gibt und die Ansicht und das Viewmodel immer synchron sind.

Sie können jedoch auch ein maskiertes Verhalten für Ihre Steuerelemente verwenden, so dass der Benutzer nur Werte eingeben kann, die keinen bindingerror auslösen.

+0

Sieht aus wie diese Kombination von Taktiken die robusteste Lösung ist. Ich wusste nichts über IDataErrorInfo! –

0

Versuchen Sie ValidationRules zu verwenden. Führen Sie dann in Ihrer Klasse der Validierung Ihre Bedingung aus, wenn der Wert string oder numerisch ist.

Verwandte Themen