在我的申请中,我处理的是货币价值,但是精确到分钱就足够了。因此我决定将所有金额存储为美分。但是当我将值绑定到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),或者是否真的必须编写自定义值转换器?
答案 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)