WPF Xaml StringFormat为百分比移动小数位但没有%

时间:2017-08-02 22:09:19

标签: c# wpf xaml

尝试将0.1500显示为15.00。我的C#属性是小数,我的xaml代码是<TextBox Text="{Binding ClosingRate, StringFormat={}{0:P2}}"/>我希望格式将小数点向右移动2个位置,而不必更改小数值,也不需要前导0.&#34; P2&# 34;格式让我接近,但显示20.00%,我不想要百分号。

1 个答案:

答案 0 :(得分:2)

你不能通过简单的StringFormat来做到这一点。它为您提供一些预定义的选项,其中有趣的极端情况几乎没有可扩展性。您想要做的是有效*=100您的价值,并且不会通过绑定或格式直接支持该类型,因为该算术操作。

事实上,P /%实际上也是* = 100,这可能只是一个巧合。你可以破解它跳过%,但如果在3天内你有另一个你需要移动的地方,那么它根本无济于事。它由不同的数字组成。

解决方案是......将显示的值乘以100.您不需要更改源值 - 这只是强制UI读取与源不同的值的问题之一。

两种最简单的方法是:

  • 您可以在ViewModel中执行此操作,只需公开一个新属性,即ClosingRateFormatted,它将是只读的,并将返回ClosingRate * 100(只需记住通知两者的更改属性)
  • 您可以像往常一样使用IValueConverter并绑定到ClosingRate。转换器有两种方法,Convert和ConvertBack,你可以在一个中做* = 100,在另一个中做/ = 100(如果需要的话),这将改变传递到UI或从UI传递的值,但源不会通知。

使用Converter,更改通知中不需要进行任何更改(与第一个选项相反),但使用转换器肯定比创建新的只读属性更难。