Pergunta

Eu tenho um ComboBox ligado a uma ObservableCollection de decimais. O que é a maneira correta de aplicar o nosso conversor de moeda para os itens?

Editar:

a) Eu tenho um conversor de moeda existente que devo usar b) .NET 3.0

Preciso ao modelo os itens?

Foi útil?

Solução

Sua melhor aposta se você tem algum código para fazer a conversão é de fato para executar cada item por um IValueConverter através de um modelo.

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

Assim que você acabou de definir sua classe CurrencyConverter tal que implementa IValueConverter e chama o código para ligar a quantidade dada em uma string formatada.

Outras dicas

Você pode usar a propriedade ItemStringFormat em ComboBox para dizer-lhe como formatar cada um dos seus itens:

<ComboBox ItemStringFormat="c">

No entanto, estar ciente de que quando se usa "c" como um formatador de moedas, ele irá usar a moeda definida pela máquina local. Se os seus valores são definidos no $, mas o seu PC cliente está sendo executado com libras ou ienes como seu símbolo de moeda, eles não vão estar vendo o que você quer que eles vejam.

Use StringFormat na expressão Binding como

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

Veja este blog para mais detalhes.

A ValueConverter é uma outra maneira - StringFormat não trabalha em .NET3.0 ele precisa WPF3.5 SP1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top