Использовать StringFormat, чтобы добавить строку в XAML в WPF привязки


у меня есть приложение WPF 4, которое содержит текстовый блок, который имеет одностороннюю привязку к целочисленному значению (в данном случае температура в градусах Цельсия). 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}}"/>

к сожалению, ни один из примеров, которые я видел, не добавил строку к связанному значению, как я пытаюсь сделать. Я уверен, что это должно быть что-то простое, но мне не повезло найти его. Может кто-нибудь объяснить мне, как это сделать?

4 85

4 ответа:

ваш первый пример-это то, что вам нужно:

<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 в привязках работает только для свойств "текст". Используя это для метки.Содержание не будет работать

в xaml

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

на ViewModel, таким образом установка значения также работает:

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