O que é uma boa maneira de parametrizar um ValueConverter usado em um ControlTemplate?
-
05-07-2019 - |
Pergunta
A templated controlar Eu estou trabalhando em usa um ValueConverter assim:
<ListBox>
<ListBox.Resources>
<Controls:CodeDescriptionValueConverter x:Key="CodeDescriptionValueConverter"/>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource CodeDescriptionValueConverter}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Esta é a aparência padrão que eu fornecer em generic.xaml. Quando eu uso este controle vou querer passar cadeias de formato diferente para o conversor. Existe uma maneira de fazer isso acontecer sem fornecer o ControlTemplate completo?
Meu primeiro pensamento foi que eu poderia usar ConverterParameter com um TemplateBinding a uma propriedade no controle, mas descobri que ConverterParameters não pode ser vinculado. Outra opção poderia ser para obter acesso ao controle a partir do método ConvertTo, em seguida, apanhar essa propriedade. Eu não sei como fazer isso. Qualquer opção que eliminariam a necessidade de re-modelo completamente o controle cada vez que eu usá-lo seria útil (é um monte de XAML).
Solução
Nestas situações, eu geralmente fazer uma de duas coisas:
1) Vincular a um objeto que tem acesso a ambos o imóvel que você deseja vincular a seqüência de formato. No conversor então você vai ter acesso a ambos a propriedade e a cadeia de formato.
2) Adicione propriedades ao seu objeto de dados / viewmodel / etc para a cadeia de formato e texto formatado. Em seguida, ligar para as propriedades de texto formatado. Supondo que você está usando INotifyPropertyChanged, tenha em mente que você precisará acionar o evento PropertyChanged para a propriedade texto formatado sempre que mudar as propriedades do texto ou da corda do formato