Windows Phone 8.1 XAML StringFormat

Я пытаюсь отобразить некоторый текст вместе со связанными данными, например, у меня есть код:

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

Я хочу добавить текст перед "Сокращением", из того, что я прочитал, было бы возможно, используя StringFormat как свойство связывания, что-то вроде строк:

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

Однако, похоже, это не работает, разве это уже не способ делать вещи в 8.1?

Ответы

Ответ 1

StringFormat не поддерживается в WinRT. Однако вы можете легко заменить его, создав собственный конвертер:

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

Затем объявите его в своих ресурсах страниц:

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

И используйте его в своих привязках:

<TextBlock Text="{Binding Path=SomeText, Converter={StaticResource ResourceKey=StringFormat}, ConverterParameter='Hello {0}'}" />

Ответ 2

Как @KooKiz указал, что StringFormat на данный момент не поддерживается, но вы можете выполнить тот же эффект, просто вырвав ваши строки в встроенные Runs без конвертора, например;

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

Надеюсь, это поможет, приветствует.