我在软件中使用两种不同的货币。根据公司来源,如何在数字数据之前显示货币。 £或€
<TextBlock Text="{Binding FNetPriceAfterDisc,StringFormat=c}" />
我想在后面的代码中绑定“ c”。如果可能的话。
我尝试了此操作,但不起作用。不知道怎么了。
<TextBlock HorizontalAlignment="Center" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding FNetPriceAfterDisc,StringFormat=€0.000}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Country}" Value="UK">
<Setter Property="Text" Value="{Binding FNetPriceAfterDisc,StringFormat=c}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
答案 0 :(得分:3)
我会给每个项目一个language identifier tag作为字符串:en-GB
,de
,en-US
等,然后编写一个MultiValueConverter并将其用于为任意区域性设置具有任意格式的任意文本的格式。由于用于指定“ currency”的格式字符串也是一个参数,因此可以将其用于其他本地化任务。重要的不只是简单地对货币符号进行硬编码:如果意大利离开欧元区,您就不必为此沉迷(除非欧盟支付您的薪水)。
public class CultureFormatConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
CultureInfo culture)
{
var value = values[0];
var format = values[1] as String;
var targetCulture = values[2] as string;
return string.Format(new System.Globalization.CultureInfo(targetCulture),
format, value);
}
public object[] ConvertBack(object value, Type[] targetTypes, object
parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在资源所在的范围内的地方创建转换器:
<local:CultureFormatConverter x:Key="CultureFormatConverter" />
然后像这样使用它:
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource CultureFormatConverter}">
<!-- Bind to FNetPriceAfterDisc property of the viewmodel -->
<Binding Path="FNetPriceAfterDisc" />
<!-- To pass a literal value with a binding, assign it to Source -->
<Binding Source="{}{0:c}" />
<!--
Bind to Culture property of the viewmodel: Should be String that returns
"de" for Germany, "en-GB" for UK, null for Pennsylvania and Australia.
If you want a fixed value, make it Source="de" or whatever, not Path="de".
But if you want to use a constant culture value, you might be happier
just using the ConverterCulture parameter to an ordinary binding.
-->
<Binding Path="Culture" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
答案 1 :(得分:0)
您可以在父类上实现IFormattable
接口,也可以定义公司起源的IValueConverter' and using as
ConverterParameter`。
或者,如果绑定对象中已经有货币类型作为属性,则可以使用MultiBinding:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FNetPriceAfterDisc"/>
<Binding Path="CompanyCurrency"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
编辑: 旧行是:
<MultiBinding StringFormat="{0} {1}">
正确的行是
<MultiBinding StringFormat="{}{0} {1}">