1

我需要根据存储在数据库中的货币值以货币格式(欧元/美元/日元等)显示一个值。

在数据库中,数据的存储方式如下:

Id    Value   Currency
1     1000    EUR
2     1500    USD
3     9650    USD

在 XAML 中,我想知道如何以正确的货币格式显示值。例如,如果我从数据库中读取第一行 (Id=1),我希望在 UI 上将其显示为 1,000 欧元,但如果我读取第二行 (Id=2),它应该显示为 $1,500。

现在我的 XAML MVVM 绑定看起来像这样:

<TextBlock Text="{Binding SelectedItem, StringFormat=c0}" ...

...对我来说,这显示的价值总是 1,500 美元,这是我不想要的。

4

2 回答 2

4

转换器类可以帮助您实现所需的行为

public class CurrencyConverter : MarkupExtension, IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return GetCurrency(values);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }


    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }

    private string GetCurrency(object[] values)
    {
        switch (values[1].ToString())
        {
            case "USD":
                return string.Format(new System.Globalization.CultureInfo("en-US"), "{0:C}", values[0]);

            case "EUR":
                return string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:C}", values[0]);

            default:
                return string.Format(new System.Globalization.CultureInfo("en-US"), "{0:C}", values[0]);
        }
    }
}

只需将 XAML 中的转换器与您的TextBlock绑定一起使用。

<TextBlock DataContext="{Binding SelectedItem, ElementName=listBox}">
    <TextBlock.Text>
        <MultiBinding Converter="{local:CurrencyConverter}">
            <Binding Path="Value"/>
            <Binding Path="Currency"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
于 2013-08-12T11:51:05.897 回答
0

您使用的字符串格式基于当前的系统区域设置,因此根本不是一种方法。在您的情况下,您会对这样的转换器感兴趣:http: //blogs.msdn.com/b/bencon/archive/2006/05/10/594886.aspx

传入两个值(货币和金额),返回要在 UI 上显示的字符串表示形式。

于 2013-08-12T11:24:40.813 回答