StringFormat,除以100(或任何自定义缩放)

时间:2015-10-23 09:40:23

标签: wpf xaml valueconverter

在我的申请中,我处理的是货币价值,但是精确到分钱就足够了。因此我决定将所有金额存储为美分。但是当我将值绑定到Xaml时,我希望使用类似

的内容来查看美元的值
public class BootUpReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, SplashActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}

其中***应该用适当的东西代替。我仔细阅读了文档http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8(v=vs.100).aspx

其中有一些除以1000的例子(使用','),乘以100(使用'%')等。有没有办法在<TextBlock Text="{Binding Product.Price, StringFormat={}{***}}"/> 中进行自定义缩放(如除以100),或者是否真的必须编写自定义值转换器?

2 个答案:

答案 0 :(得分:3)

除了你提到的那些操作(按1000缩放,或执行百分比或转换百分比),没有办法做&#34; custom&#34;用格式字符串缩放。

您可以使用Converter来解决问题,或者如果您打算在其他地方使用它(并且它不是一个非常具体的情况),您可能想要为您添加一个属性Product,例如:

decimal PriceInDollars { get { return Price / 100; }

如果有需要,请务必通知Price此房产的更改。

如果你想要Converter路线,并且你想要一些多功能的东西,你可能想要尝试这个:http://www.codeproject.com/Articles/239251/MathConverter-How-to-Do-Math-in-XAML或散布在网络上的许多其他人之一(搜索像& #34; Math Converter WPF&#34;,有很多)。无需从头开始编写自己的文件。

使用我链接的那个(我根本没有关联),如:

<!-- somewhere in resources -->
<ikriv:MathConverter x:Key="MathConverter" />

然后:

<TextBlock Text="{Binding Product.Price, 
                  Converter={StaticResource MathConverter},
                  ConverterParameter=x/100}"/>

答案 1 :(得分:1)

根据建议我写了一个非常简单的ValueConverter,即

public class CentConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {

        if (targetType != typeof(string)) throw new NotImplementedException();
        var valueInCents = Int32.Parse(value.ToString());
        return String.Format("{0:C}", (double)valueInCents / 100);

    }

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

因为我知道我总是只想在转换为字符串的上下文中使用它,而我永远不需要转换回来。如果有强类型版本的转换器(或更好,更具体地类型为类型object),那将是很好的,例如,使用如下方法签名,以便可以摆脱演员,

public string Convert(int value, object parameter, CultureInfo culture)