number c# wpf xaml data-binding string-formatting

c# - number - Use StringFormat para agregar una cadena a un enlace XAML de WPF



string.format java (4)

Tengo una aplicación WPF 4 que contiene un TextBlock que tiene un enlace unidireccional a un valor entero (en este caso, una temperatura en grados Celsius). El XAML se ve así:

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

Esto funciona bien para mostrar el valor actual de la temperatura, pero me gustaría formatear este valor para que incluya ° C en lugar de solo el número (30 ° C en lugar de solo 30). He estado leyendo sobre StringFormat y he visto varios ejemplos genéricos como este:

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

y

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

Desafortunadamente, ninguno de los ejemplos que he visto ha agregado una cadena al valor encuadernado como trato de hacer. Estoy seguro de que tiene que ser algo simple, pero no estoy teniendo suerte para encontrarlo. ¿Alguien puede explicarme cómo hacer eso?


Aquí hay una alternativa que funciona bien para la legibilidad si tiene el enlace en el medio de la cadena o enlaces múltiples:

<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>


En xaml

<TextBlock Text="{Binding CelsiusTemp}" />

En ViewModel , esta manera de establecer el valor también funciona:

public string CelsiusTemp { get { return string.Format("{0}°C", _CelsiusTemp); } set { value = value.Replace("°C", ""); _CelsiusTemp = value; } }


Su primer ejemplo es efectivamente lo que necesita:

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


Tenga en cuenta que el uso de StringFormat en enlaces solo parece funcionar para las propiedades de "texto". Usar esto para Label.Content no funcionará