15

I am trying to display some text along with binded data, for example, I have the code:

<TextBlock Text="{Binding Shorthand}"  Style="{ThemeResource ListViewItemTextBlockStyle}" />

I want to add some text before 'Shorthand', from what I have read this would be possible by using StringFormat as a property of the Binding, something along the lines of:

<TextBlock Text="{Binding Path=Shorthand, StringFormat={0} text I want to add}"  Style="{ThemeResource ListViewItemTextBlockStyle}" />

However this doesn't seem to work, is this no longer the way to do things in 8.1?

blawford
  • 435
  • 5
  • 18

3 Answers3

30

StringFormat isn't supported on WinRT. However, you can easily replace it by creating a custom converter:

public class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return string.Format(parameter as string, value);
    }  

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return null;
    }
}

Then declare it in your page resources:

<Page.Resources>
    <local:StringFormatConverter x:Name="StringFormat"/>
</Page.Resources>

And use it in your bindings:

<TextBlock Text="{Binding Path=SomeText, Converter={StaticResource ResourceKey=StringFormat}, ConverterParameter='Hello {0}'}" />
Kevin Gosse
  • 38,392
  • 3
  • 78
  • 94
16

Like @KooKiz pointed out StringFormat at the moment isn't supported, but you could accomplish the same effect just breaking out your lines into inline Runs without a converter like;

<TextBlock>
   <Run Text="Hey I wanted to put this text in front of "/>
   <Run Text="{Binding Path=Shorthand}"/>
   <Run Text=" and I also wanted some text after it. Neato.."/>
</TextBlock>

Hope this helps, cheers.

Chris W.
  • 22,835
  • 3
  • 60
  • 94
0

I used this approach (Written by Microsoft): https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.ivalueconverter

It works great!

deanpodgornik
  • 322
  • 2
  • 7