Search code examples
wpfxamlbindingtextblockstring-formatting

TextBlock: Binding of Text and StringFormat


Is it possible to bind Text and StringFormat too?

<TextBlock Text="{Binding Path=Price, StringFormat={Binding Path=DecimalPoints}}" />

DecimalPoints is constantly changing from F0 to F15. Unfortunatelly the code above doesn't compile.


Solution

  • I think your best bet is definitely a converter. Then your binding would look like this:

    <TextBlock.Text>
       <MultiBinding Converter="{StaticResource StringFormatConverter }">
          <Binding Path="Price"/>
          <Binding Path="DecimalPoints"/>
       </MultiBinding>
    </TextBlock.Text>
    

    Then a quick converter (you can certainly make it nicer, but this is the general idea).

        public class StringFormatConverter : IMultiValueConverter
        {
          #region IMultiValueConverter Members
    
          public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
          {
              double number = (double)values[0];
              string format = "f" + ((int)values[1]).ToString();
              return number.ToString(format);
          }
    
          public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
          {
            throw new NotImplementedException();
          }
    
          #endregion
        }