Какой хороший способ параметризации ValueConverter используется в ControlTemplate?
-
05-07-2019 - |
Вопрос
Шаблонный элемент управления, над которым я работаю, использует ValueConverter следующим образом:
<ListBox>
<ListBox.Resources>
<Controls:CodeDescriptionValueConverter x:Key="CodeDescriptionValueConverter"/>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource CodeDescriptionValueConverter}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Это внешний вид по умолчанию, который я предоставляю в generic.xaml. Когда я использую этот элемент управления, я хочу передать в конвертер строки разных форматов. Есть ли способ сделать это без предоставления полной ControlTemplate?
Сначала я подумал, что можно использовать ConverterParameter с TemplateBinding для свойства элемента управления, но я обнаружил, что к ConverterParameters нельзя привязать. Другой вариант может состоять в том, чтобы получить доступ к элементу управления из метода ConvertTo, а затем выбрать это свойство. Я не уверен, как это сделать. Любые параметры, которые устранят необходимость полностью изменять шаблон элемента управления каждый раз, когда я его использую, будут полезны (это много Xaml).
Решение
В этих ситуациях я обычно делаю одно из двух:
1) Привязать к объекту, который имеет доступ к тому свойству, которое вы хотите привязать к строке формата. В конвертере у вас будет доступ как к свойству, так и к строке формата.
2) Добавьте свойства к вашему объекту данных / viewmodel / etc для строки формата и отформатированного текста. Затем свяжите со свойствами форматированного текста. Предполагая, что вы используете INotifyPropertyChanged, имейте в виду, что вам нужно будет запускать событие propertyloaded для свойства форматированного текста всякий раз, когда вы изменяете свойства текста или строки форматирования