2

我有一个绑定到小数的 ObservableCollection 的 ComboBox。将我们的货币转换器应用于商品的正确方法是什么?

编辑:

a) 我有一个必须使用的现有货币转换器 b) .NET 3.0

我需要对项目进行模板化吗?

4

3 回答 3

10

您可以使用 ComboBox 上的 ItemStringFormat 属性来告诉它如何格式化每个项目:

<ComboBox ItemStringFormat="c">

但是,请注意,当使用“c”作为货币格式化程序时,它将使用本地机器定义的货币。如果您的值以 $ 定义,但您的客户端 PC 使用英镑或日元作为其货币符号,他们将不会看到您希望他们看到的内容。

于 2008-11-17T03:42:20.670 回答
2

如果您有一些代码来进行转换,那么您最好的选择确实是通过模板通过 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 并调用您的代码将给定金额转换为格式化字符串。

于 2008-11-17T04:51:18.207 回答
0

在 Binding 表达式中使用StringFormat ,例如

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

有关更多详细信息,请参阅此博客。

ValueConverter是另一种方式 - StringFormat 在.NET3.0上不起作用,它需要 WPF3.5 SP1。

于 2008-11-17T03:37:47.433 回答