Связывание StringFormat
У меня есть набор текстовых блоков, которые я собираюсь показывать, и мне нужно, чтобы текст каждого текстового блока отображался по-разному. В настоящее время я сохраняю строку формата в свойстве тега, и мне нужно отобразить текст в этом формате. Как связать раздел StringFormat?
Что-то вроде раздела ниже:
<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />
Ответы
Ответ 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. Он будет источником своих данных из исходного источника данных.