Domanda

Ho un ComboBox associato a un oggetto ObservableCollection di decimali. Qual è il modo corretto di applicare il nostro convertitore di valuta agli articoli?

Modifica:

a) Ho un convertitore di valuta esistente che devo usare b) .NET 3.0

Devo modellare gli elementi?

È stato utile?

Soluzione

La tua scommessa migliore se hai del codice per fare la conversione è in effetti eseguire ogni elemento attraverso un IValueConverter tramite un modello.

<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}" />

Quindi devi solo definire la tua classe CurrencyConverter in modo tale da implementare IValueConverter e chiamare il tuo codice per trasformare l'importo dato in una stringa formattata.

Altri suggerimenti

Puoi usare la proprietà ItemStringFormat su ComboBox per dirgli come formattare ciascuno dei suoi elementi:

<ComboBox ItemStringFormat="c">

Tuttavia, tieni presente che quando usi " c " come formattatore di valuta, utilizzerà la valuta definita dalla macchina locale. Se i tuoi valori sono definiti in $ ma il tuo PC client è in esecuzione con sterline o yen come simbolo di valuta, non vedranno ciò che vuoi che vedano.

Usa StringFormat nell'espressione Binding come

<TextBox Text="{Binding Path=Value, StringFormat=Amount: {0:C}}"/>

Vedi blog per maggiori dettagli.

Un ValueConverter è un altro modo - StringFormat non funziona su .NET3.0, richiede WPF3.5 SP1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top