Use StringFormat to add a string to a WPF XAML binding

吃可爱长大的小学妹 提交于 2019-11-26 10:28:45

问题


I have a WPF 4 application that contains a TextBlock which has a one-way binding to an integer value (in this case, a temperature in degrees Celsius). The XAML looks like this:

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

This works fine for displaying the actual temperature value but I\'d like to format this value so it includes °C instead of just the number (30°C instead of just 30). I\'ve been reading about StringFormat and I\'ve seen several generic examples like this:

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

and

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

Unfortunately, none of the examples I\'ve seen have appended a string to the bound value as I\'m trying to do. I\'m sure it\'s got to be something simple but I\'m not having any luck finding it. Can anyone explain to me how to do that?


回答1:


Your first example is effectively what you need:

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



回答2:


Here's an alternative that works well for readability if you have the Binding in the middle of the string or multiple bindings:

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



回答3:


Please note that using StringFormat in Bindings only seems to work for "text" properties. Using this for Label.Content will not work




回答4:


In xaml

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

In ViewModel, this way setting the value also works:

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


来源:https://stackoverflow.com/questions/19278515/use-stringformat-to-add-a-string-to-a-wpf-xaml-binding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!