Какой хороший способ параметризации ValueConverter используется в ControlTemplate?

StackOverflow https://stackoverflow.com/questions/1401486

Вопрос

Шаблонный элемент управления, над которым я работаю, использует 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 для свойства форматированного текста всякий раз, когда вы изменяете свойства текста или строки форматирования

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top