2009-09-09 3 views
0

Un contrôle basé sur un modèle Je travaille sur utilise un ValueConverter comme ceci:Quel est un bon moyen de paramétrer un ValueConverter utilisé dans un ControlTemplate?

<ListBox> 
    <ListBox.Resources> 
     <Controls:CodeDescriptionValueConverter x:Key="CodeDescriptionValueConverter"/> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding Converter={StaticResource CodeDescriptionValueConverter}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Ceci est l'apparence par défaut que je fournir en generic.xaml. Quand j'utilise ce contrôle, je vais vouloir passer différentes chaînes de format dans le convertisseur. Y a-t-il un moyen d'y arriver sans fournir le ControlTemplate complet? Ma première pensée était que je pourrais utiliser ConverterParameter avec un TemplateBinding à une propriété sur le contrôle, mais j'ai découvert que ConverterParameters ne peut pas être lié. Une autre option pourrait être d'obtenir l'accès au contrôle à partir de la méthode ConvertTo, puis de retirer cette propriété. Je ne suis pas sûr de savoir comment faire ça. Toutes les options qui élimineraient le besoin de re-calibrer complètement le contrôle chaque fois que je l'utilise seraient utiles (c'est beaucoup de Xaml).

Répondre

1

Dans ces situations, je généralement une des deux choses:

1) se lient à un objet qui a accès à la fois la propriété que vous souhaitez lier à la chaîne de format. Dans le convertisseur, vous aurez alors accès à la fois à la propriété et à la chaîne de format.

2) Ajoutez des propriétés à votre objet de données/viewmodel/etc pour la chaîne de format et le texte formaté. Puis lier aux propriétés de texte formatées. En supposant que vous utilisez INotifyPropertyChanged, gardez à l'esprit que vous devrez déclencher l'événement propertychanged pour la propriété text formatée chaque fois que vous changez le texte ou les propriétés de la chaîne de format

+0

Merci pour les commentaires, ce sont de bonnes possibilités que je n'avais pas. Je pensais à. –

Questions connexes