使用StringFormat将字符串添加到WPF XAML绑定

时间:2013-10-09 17:14:18

标签: c# wpf xaml data-binding string-formatting

我有一个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}}"/>

不幸的是,我所见过的所有例子都没有在我想要的时候将一个字符串附加到绑定值。我敢肯定它必须简单但我找不到任何运气。任何人都可以向我解释如何做到这一点吗?

4 个答案:

答案 0 :(得分:178)

您的第一个例子实际上是您所需要的:

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

答案 1 :(得分:91)

如果你在字符串的中间或多个绑定中有Binding,那么这个替代方法可以很好地提高可读性:

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

答案 2 :(得分:69)

请注意,在Bindings中使用StringFormat似乎只适用于“text”属性。将它用于Label.Content将无法正常工作

答案 3 :(得分:-6)

在xaml

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

ViewModel中,设置值的方式也有效:

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