Formatage des devises sur les éléments de la liste déroulante
-
08-07-2019 - |
Question
J'ai une ComboBox liée à un ObservableCollection de décimales. Quelle est la bonne façon d’appliquer notre convertisseur de devises aux articles?
Modifier:
a) J'ai un convertisseur de devise existant que je dois utiliser b) .NET 3.0
Dois-je modéliser les éléments?
La solution
Votre meilleur pari si vous avez du code pour effectuer la conversion est en effet d'exécuter chaque élément via un IValueConverter via un modèle.
<Window.Resources>
<my:CurrencyConverter x:Key="currencyConverter" />
<DataTemplate x:Key="thingTemplate" DataType="{x:Type my:Thing}">
<TextBlock
Text="{Binding Amount,Converter={StaticResource currencyConverter}}" />
</DataTemplate>
</Window.Resources>
<ComboBox
ItemSource="... some list of Thing instances ..."
ItemTemplate="{StaticResource thingTemplate}" />
Vous ne définissez donc que votre classe CurrencyConverter de sorte qu'elle implémente IValueConverter et appelle votre code pour transformer le montant donné en chaîne formatée.
Autres conseils
Vous pouvez utiliser la propriété ItemStringFormat sur ComboBox pour lui indiquer comment formater chacun de ses éléments:
<ComboBox ItemStringFormat="c">
Cependant, sachez que lorsque vous utilisez " c " en tant que formateur de devise, il utilisera la devise définie par la machine locale. Si vos valeurs sont définies dans $ mais que votre ordinateur client utilise des livres ou des yens comme symbole monétaire, ils ne verront pas ce que vous voulez qu'ils voient.
Utilisez StringFormat dans l'expression de liaison, comme
.<TextBox Text="{Binding Path=Value, StringFormat=Amount: {0:C}}"/>
Voir ceci bloguez pour plus de détails.
Un ValueConverter est un autre moyen - StringFormat ne fonctionne pas sur .NET3.0, il nécessite WPF3.5 SP1.