web-dev-qa-db-fra.com

Utilisez StringFormat pour ajouter une chaîne à une liaison WPF XAML

J'ai une application WPF 4 qui contient un TextBlock qui a une liaison à sens unique à une valeur entière (dans ce cas, une température en degrés Celsius). Le XAML ressemble à ceci:

<TextBlock x:Name="textBlockTemperature"><Run Text="{Binding CelsiusTemp, Mode=OneWay}"/></TextBlock>

Cela fonctionne bien pour afficher la valeur de température réelle, mais j'aimerais formater cette valeur afin qu'elle inclue ° C au lieu du nombre (30 ° C au lieu de 30). J'ai lu sur StringFormat et j'ai vu plusieurs exemples génériques comme celui-ci:

// format the bound value as a currency
<TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" />

et

// preface the bound value with a string and format it as a currency
<TextBlock Text="{Binding Amount, StringFormat=Amount: {0:C}}"/>

Malheureusement, aucun des exemples que j'ai vus n'a ajouté de chaîne à la valeur liée, comme j'essaie de le faire. Je suis sûr que ça doit être simple, mais je n'ai aucune chance de le trouver. Quelqu'un peut-il m'expliquer comment faire cela?

112
bmt22033

Votre premier exemple est effectivement ce dont vous avez besoin:

<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />
187
Reed Copsey

Voici une alternative qui fonctionne bien pour la lisibilité si vous avez la liaison au milieu de la chaîne ou plusieurs liaisons:

<TextBlock>
  <Run Text="Temperature is "/>
  <Run Text="{Binding CelsiusTemp}"/>
  <Run Text="°C"/>  
</TextBlock>

<!-- displays: 0°C (32°F)-->
<TextBlock>
  <Run Text="{Binding CelsiusTemp}"/>
  <Run Text="°C"/>
  <Run Text=" ("/>
  <Run Text="{Binding Fahrenheit}"/>
  <Run Text="°F)"/>
</TextBlock>
97
denis morozov

Veuillez noter que l'utilisation de StringFormat dans Bindings ne semble fonctionner que pour les propriétés "text". Utiliser ceci pour Label.Content ne fonctionnera pas

75
Casper Ehrenborg