Wenn man in WPF oder Silverlight Daten an ein Control bindet kann man die Daten püber einfach zu erstellende Konverter
Klassen konvertieren bevor sie angezeigt werden bzw. bevor sie zurückgeschrieben werden. Das war bisher so.
Seit dem ServicePack1 von Visual Studio 2008 kan man – zumindest bei den alltäglichen Konvertierungen – eine stark vereinfachte
Syntax verwenden:
<TextBlock>
<TextBlock.Text>
<Binding ElementName="myComboBox" Path="SelectedItem.Content" StringFormat="{}{0:C}"/>
</TextBlock.Text>
</TextBlock>
<GridViewColumn Header="Price" DisplayMemberBinding="{Binding Path=Price, StringFormat=C}"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Item1 cost: {0}, Item2 cost: {1}">
<Binding ElementName="myComboBox" Path="SelectedItem.Content"/>
<Binding ElementName="myComboBox2" Path="SelectedItem.Content"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Die Angabe des Stringformats gibt uns die Möglichkeit zumindest einfach Konertierungen ohne eigene Klasse vorzunehmen. Hierbei kann
man d für kurze Datumsangaben, D für lange Datumsangaben, c für Währung und P für Prozentangaben.
Alternativ gibt es auch noch das Contentstringformat mit dem man komplexere Konvertierungen vornehmen kann:
<Label ContentStringFormat="dddd – d - MMMM">
<sys:DateTime>2004/3/4 13:6:55</sys:DateTime>
</Label>
<Button ContentStringFormat="{}{0:MM/dd/yyyy}">
<sys:DateTime>2004/3/4 13:6:55</sys:DateTime>
</Button>
<ListBox Name="lb1" SelectedIndex="1" ItemStringFormat="F1">
<sys:Double>3.14159</sys:Double>
<sys:Double>2.71828</sys:Double>
</ListBox>
Diese Vereinfachung ist wirklich hilfreich und funktioniert erst ab ServicePack1 aber dieser dürfte ja inzwischen fast überall freigegeben worden
sein.