Подтвердить что ты не робот

Связывание StringFormat

У меня есть набор текстовых блоков, которые я собираюсь показывать, и мне нужно, чтобы текст каждого текстового блока отображался по-разному. В настоящее время я сохраняю строку формата в свойстве тега, и мне нужно отобразить текст в этом формате. Как связать раздел StringFormat?

Что-то вроде раздела ниже:

<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />

4b9b3361

Ответ 1

Так как BindingBase.StringFormat не является свойством зависимостей, я не думаю, что вы можете связать его. Если строка форматирования меняется, я боюсь, вам придётся прибегнуть к чему-то вроде этого

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

и сделайте форматирование в своей модели просмотра. В качестве альтернативы вы можете использовать MultiBinding и конвертер (пример кода не проверен):

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myStringFormatter}">
            <Binding Path="MyProperty" />
            <Binding Path="MyFormatString" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

public class StringFormatter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Format((string)values[1], values[0]);
    }
    ...
}

Ответ 2

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0},{1}">
            <Binding Path="MyProperty" />
            <Binding Path="MyFormatString" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Ответ 3

Форматирование строк - это параметр отображения и, следовательно, должен находиться близко к уровню пользовательского интерфейса, вы можете объявить его в Xaml или иметь форматированные строковые свойства в ViewModel и выполнить форматирование в Get из этих свойств и привязать TextBlock для него - свойства ViewModel. Он будет источником своих данных из исходного источника данных.