Question

Un contrôle basé sur un modèle sur lequel je travaille utilise un ValueConverter comme suit:

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

C’est le look par défaut que je fournis dans generic.xaml. Lorsque j'utilise ce contrôle, je souhaite transmettre différentes chaînes de format au convertisseur. Existe-t-il un moyen d'y arriver sans fournir le ControlTemplate complet?

Ma première pensée a été que je pouvais utiliser ConverterParameter avec un TemplateBinding pour une propriété du contrôle, mais j'ai découvert que ConverterParameters ne pouvait pas être lié. Une autre option pourrait être d'accéder au contrôle à partir de la méthode ConvertTo, puis de sélectionner cette propriété. Je ne sais pas comment faire ça. Toute option qui éliminerait la nécessité de remodeler complètement le contrôle chaque fois que je l’utiliserais serait utile (c’est beaucoup de Xaml).

Était-ce utile?

La solution

Dans ces situations, je fais généralement l'une des deux choses suivantes:

1) Lier à un objet qui a accès à la fois à la propriété que vous voulez 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 formatage et le texte formaté. Ensuite, liez-vous aux propriétés du texte formaté. En supposant que vous utilisez INotifyPropertyChanged, n'oubliez pas que vous devez déclencher l'événement propertychanged pour la propriété de texte mis en forme chaque fois que vous modifiez les propriétés de chaîne de texte ou de format.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top