| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

ich beschäftige mich gerade ein wenig mit der Validierung unter WPF und stosse hier gerade auf ein Problem. Meine Validierungsklasse arbeitete mit IDataErrorInfo und prüft aber zusätzlich noch die DataAnnotations, da ich diese sehr praktisch finde. Aber ich denke, das dürfte nicht die Ursache für das Problem sein.

Nehmen wir ein simples Eingabeformular mit einer Anschrift.
Von den Feldern sind Name und Ort Pflichtfelder.
wenn ich nun eine neue Anschrift eingeben möchte, dann werden mir dank ValidatesOnDataErrors=True beide Pflichtfelder gleich rot markiert. Das ist sachlich zwar korrekt, schreckt aber auch irgendwie ab.

Ich hätte gerne, das erst ab einen bestimmten Zeitpunkt - in diesem Fall Speichern der Eingabe - die Validierung gestartet wird und DANN erst die Felder rot werden. Perfekt wäre es, wenn man dies für einzelne Properties bestimmen könnte, aber ich glaube das geht dann doch zu weit :) Das Ganze dann "natürlich" MVVM-konform.

Hat jemand Ideen, wie und ob man das umsetzen könnte? Oder ist davon pauschal abzuraten, weil es gegen irgendwelche Konventionen verstossen würde? Ich orientiere mich hier einfach mal an Webformularen und die prüfen die Pflichtfelder ja auch erst beim Absenden.

Vielen Dank bereits im voraus,
Jens
27.05.2011
Jens Duczmal 2,6k 1 3 9
1 Antwort
1
UpdateSourceTrigger=Explicit (in XAML).

<TextBox Name="edtName" Text="{Binding Path=Name, UpdateSourceTrigger=Explicit}"/>


Im Code dann so:

BindingExpression be = edtName.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();


Über eine BindingGroup geht es auch so (dann findet die Validierung mit nur einer Anweisung im Code für alle Bindungen statt):

BindingGroup.CommitEdit();


Vorraussetzung ist für die BindingGroup ist, Du hast auch eine BindingGroup definiert, z.B. so:

<Window.BindingGroup>
<BindingGroup>
<BindingGroup.ValidationRules>

</BindingGroup.ValidationRules>
</BindingGroup>
</Window.BindingGroup>
27.05.2011
Andreas Ganzer 1,4k 1 8
Nur benötige ich dann leider Code-behind. Wobei ich nach Deinem Ansatz diesen Link hier gefunden habe. http://shujaatsiddiqi.blogspot.com/2011/01/updatesourcetrigger-explicit-for-mvvm.html Ich schanke aber noch, ob ich mir das antun möchte, hier noch einen Converter einzubauen :)
Jens Duczmal 30.05.2011
Du könntest zwar ohne Code-behind auskommen, aber ohne Code kommst du nicht aus ;-)

Wenn es nur um die Code-behind geht, weil Du (ich weiß echt nicht, warum) das Ziel hast, eine Anwendung zu schreiben, die nur aus XAML besteht, dann kannst Du den Code für z.B. das Click-Ereignis des OK-Schalters direkt in die XAML-Datei schreiben (in einem CDATA-Abschnitt).
Andreas Ganzer 01.06.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH