【问题标题】:WPF Xaml StringFormat move decimal places for percentage but no %WPF Xaml StringFormat 移动百分比的小数位,但没有 %
【发布时间】:2023-03-04 21:50:02
【问题描述】:

试图让 0.1500 显示为 15.00。我的 C# 属性是小数,我的 xaml 代码是 <TextBox Text="{Binding ClosingRate, StringFormat={}{0:P2}}"/> 我希望格式可以将小数点向右移动 2 位,而不必更改小数点也没有前导 0。“P2”格式让我很接近,但显示 20.00 %,我不想要百分号。

【问题讨论】:

  • 你可以使用转换器

标签: c# wpf xaml


【解决方案1】:

你不能通过简单的 StringFormat 来做到这一点。它为您提供一些预定义的选项,这些选项具有有趣的极端情况,可扩展性非常低。您想要做的实际上是 *=100 您的值,并且绑定和格式都不直接支持这种类型,因为这是算术运算。

P/% 实际上也有 *=100 的事实可能只是一个巧合。你可以破解它来跳过 % 但如果在 3 天内你有另一个地方需要将它“移动”不同的位数,它根本不会帮助你。

解决方案是...将显示的值乘以 100。您无需更改源值 - 只需强制 UI 读取与源值不同的值即可。

两种最简单的方法是:

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

使用 Converter,更改通知不需要更改(与第一个选项相反),但使用 Converters 肯定比创建新的只读属性要难一些。

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多