Форматирование валюты на элементах ComboBox - PullRequest
2 голосов
/ 17 ноября 2008

У меня есть ComboBox, связанный с ObservableCollection десятичных чисел. Как правильно применить наш конвертер валют к пунктам?

Edit:

а) У меня есть конвертер валют, который я должен использовать б) .NET 3.0

Нужно ли шаблонить элементы?

Ответы [ 3 ]

8 голосов
/ 17 ноября 2008

Вы можете использовать свойство ItemStringFormat в ComboBox, чтобы указать ему, как форматировать каждый из его элементов:

<ComboBox ItemStringFormat="c">

Однако имейте в виду, что при использовании «c» в качестве средства форматирования валюты он будет использовать валюту, определенную на локальном компьютере. Если ваши значения определены в $, но ваш клиентский компьютер работает с фунтами или иенами в качестве символа валюты, они не увидят то, что вы хотите, чтобы они увидели.

2 голосов
/ 17 ноября 2008

Лучше всего, если у вас есть какой-то код для конвертации, действительно, чтобы каждый элемент проходил через IValueConverter через шаблон.

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

Таким образом, вы просто определяете свой класс CurrencyConverter таким образом, чтобы он реализовывал IValueConverter и вызывал ваш код, чтобы превратить указанное количество в форматированную строку.

0 голосов
/ 17 ноября 2008

Используйте StringFormat в выражении Binding, например

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

См. Этот блог для получения более подробной информации.

A ValueConverter - это еще один способ - StringFormat не работает на .NET3.0, ему нужен WPF3.5 SP1.

...