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?

Était-ce utile?

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.

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