Какой хороший способ параметризации ValueConverter используется в ControlTemplate? - PullRequest
0 голосов
/ 09 сентября 2009

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

1 голос
/ 09 сентября 2009

В этих ситуациях я обычно делаю одно из двух:

1) Привязать к объекту, который имеет доступ к тому свойству, которое вы хотите привязать к строке формата. В конвертере у вас будет доступ как к свойству, так и к строке формата.

2) Добавьте свойства к вашему объекту данных / viewmodel / etc для строки формата и отформатированного текста. Затем свяжите со свойствами форматированного текста. Предполагая, что вы используете INotifyPropertyChanged, имейте в виду, что вам нужно будет запускать событие propertyloaded для свойства форматированного текста всякий раз, когда вы изменяете свойства text или string format

...