Timespan in XAML binden

converter1 Ein Teilnehmer meiner Silverlight Schulung bei ppedv schickt mir soeben eine Frage per Mail mit einem Stück XAML Code. Warum klappt die Datenbindung nicht? Das Ergebnis ist nichts. Also keine Fehlermeldung oder Exception sondern einfach nichts. Ich liebe solche Bugs *Ironie*. Das beste ist dann noch : “ bei mir gehts aber”. Was es in der Tat auch tut.

Im wesentlichen versucht der Silverlight Entwickler mittels eines eingebauten TypeConverters ein Datum zu binden. Glaubte ich jedenfalls.

Nach einigen hin und her, stellte sich heraus das nicht DateTime sondern vom Typ Timespan gebunden werden sollte. Das habe ich in der Tat noch nie probiert. In Silverlight sind eine Reihe solcher Converter in System.Component Model vorhanden. Unter anderem auch ein TimespanConverter. Nur leider scheint der von einer anderen Person Programmiert worden zu sein, als der DatetimeConverter. Siehe auch meinen Blog Eintrag zu Databinding mit Datumswerten. In der Doku finde ich dazu nichts. Als Silverlight Insider habe ich aber ganz gute Drähte zu den Microsoft Entwicklern direkt. Da habe ich auch nachgefragt. Die Lösung ist, das man den Doppelpunkt, oder andere Sonderzeichen, mit zwei Backslashes Escapen muss. Das sieht dann so aus.

<TextBlock Text="{Binding genauesAlter,StringFormat=hh\\:mm}"
                   Width="300" Height="30" Margin="0,66,67,204"/>
<TextBlock Text="{Binding genauesAlter,StringFormat=\{0:hh\\:mm\}}"
                   Width="300" Height="30" Margin="0,66,67,204"/>

Beide Varianten sind möglich. Ansonsten ist die Syntax aus den Datetime Format Expressions entnommen.

Wie man so einen Converter selbst baut steht hier übrigens beschrieben

http://msdn.microsoft.com/en-us/library/cc645047(VS.95).aspx

Kommentar schreiben