【问题标题】:Currency formatting on ComboBox items组合框项目的货币格式
【发布时间】:2010-09-22 15:06:40
【问题描述】:

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

编辑:

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

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

【问题讨论】:

    标签: wpf combobox converters


    【解决方案1】:

    在 Binding 表达式中使用 StringFormat,如

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

    看到这个blog for more details.

    ValueConverter 是另一种方式 - StringFormat 不适用于 .NET3.0,它需要 WPF3.5 SP1。

    【讨论】:

      【解决方案2】:

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

      <ComboBox ItemStringFormat="c">
      

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

      【讨论】:

      • 我们使用了一个特定的货币转换器,我确实需要使用它。不过还是谢谢。
      • 是的,如果您有需要调用的代码,那么 IValueConverter 实现是最好的方法。
      • 但是我是否通过项目模板来做到这一点,设置所选值的正确方法是什么?
      • 为我工作!这正是我一直在寻找的。我只是想格式化 Date 并尝试使用 IConverter 并在 ItemsSource 或其他地方设置 StringFormat。经过多次谷歌搜索,这成功了!谢谢!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 1970-01-01
        相关资源
        最近更新 更多