Ответ 1
Ваш первый пример - это то, что вам нужно:
<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />
У меня есть приложение WPF 4, которое содержит TextBlock, который имеет одностороннюю привязку к целочисленному значению (в данном случае температура в градусах Цельсия). XAML выглядит следующим образом:
<TextBlock x:Name="textBlockTemperature">
<Run Text="{Binding CelsiusTemp, Mode=OneWay}"/></TextBlock>
Это прекрасно работает для отображения фактического значения температуры, но я бы хотел отформатировать это значение, чтобы оно включало ° C вместо только числа (30 ° C вместо всего 30). Я читал о StringFormat и видел несколько общих примеров, подобных этому:
// format the bound value as a currency
<TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" />
и
// preface the bound value with a string and format it as a currency
<TextBlock Text="{Binding Amount, StringFormat=Amount: {0:C}}"/>
К сожалению, ни один из примеров, которые я видел, не добавлял строку к связанному значению, как я пытаюсь сделать. Я уверен, что это должно быть что-то простое, но мне не повезло найти его. Может кто-нибудь объяснить мне, как это сделать?
Ваш первый пример - это то, что вам нужно:
<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />
Здесь альтернатива, которая хорошо работает для удобочитаемости, если у вас есть привязка в середине строки или нескольких привязок:
<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>
Обратите внимание, что использование StringFormat в Bindings работает только для "текстовых" свойств. Использование этого для Label.Content не будет работать
В xaml
<TextBlock Text="{Binding CelsiusTemp}" />
В ViewModel
этот способ также устанавливает значение:
public string CelsiusTemp
{
get { return string.Format("{0}°C", _CelsiusTemp); }
set
{
value = value.Replace("°C", "");
_CelsiusTemp = value;
}
}