| 

.NET C# Java Javascript Exception

3
In einer Klasse habe ich folgende Property:

public DateTime? EntryDate
{
get;
set;
}


Das Binding sieht so aus:

<TextBox Text={Binding Path=EntryDate} .../>


Alles weitere sind Standardeinstellungen und die verwendete ValidationRule ist ExceptionValidationRule. Doch wenn die TextBox leer ist, wird eine InvalidCastException geworfen und als Fehlermeldung angezeigt.

Wie bringe ich die Bindung dazu, eine leere Eingabe als null zu übertragen? Geht das ohne eigenen Konverter und ohne eigene ValidationRule?

PS: Es gibt zu dem Thema Binding bereits viele Hinweise in CodeKicker (ihr müsst jetzt nicht danach suchen ;-)), aber leider keine, die meine Frage so beantwortet, dass ich damit was anfangen kann.
News:
22.12.2011
Andreas Ganzer 1,4k 1 8
1 Antwort
1
Probier mal

xmlns:sys="clr-namespace:System;assembly=mscorlib"
...
<TextBox Text={Binding Path=EntryDate, TargetNullValue={x:Static sys:String.Empty}}" .../>


oder das Property um folgendes erweitern:

private DateTime? _entryDate;
public DateTime? EntryDate
{
get { return _entryDate; }
set { _entryDate= value == new DateTime(0) ? null : value; }
}
22.12.2011
Mario Priebe 6,0k 3 9
Danke, aber das habe ich bereits versucht.

Die Fehlermeldung lautet "Der Wert "" konnte nicht konvertiert werden". Das heißt, dass bei einer leeren TextBox immer eine leere Zeichenkette geliefert wird. Unabhängig davon, was als TargetNullValue angegeben wird.

Z.B. TargetNullValue=(Keins) zeigt "(Keins)" in der TextBox an, solange die TextBox nicht bearbeitet wurde. Es wird aber immer eine leere Zeichenkette in die Property übertragen, wenn die TextBox leer ist. Und die Kann natürlich nicht in DateTime? konvertiert werden.
Andreas Ganzer 22.12.2011
dann prüf das doch im Setter ab, was der in die Property schreiben will?! if(String.IsNullOrWhitespace(value) ? null : value)
Mario Priebe 23.12.2011
oder eben halt dann doch einen Converter..
Mario Priebe 23.12.2011

Stelle deine .net-Frage jetzt!