[C#] StringFormat을 사용하여 WPF XAML 바인딩에 문자열 추가

정수 값 (이 경우 섭씨 온도)에 대한 단방향 바인딩이있는 TextBlock이 포함 된 WPF 4 응용 프로그램이 있습니다. XAML은 다음과 같습니다.

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

이것은 실제 온도 값을 표시하는 데 잘 작동하지만 숫자 대신 ° C를 포함하도록이 값을 형식화하고 싶습니다 (단지 30 대신 30 ° C). 저는 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을 사용하는 것은 “text”속성에 대해서만 작동하는 것처럼 보입니다. 이것을 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;
            }
        }


답변