【发布时间】:2013-08-24 01:50:22
【问题描述】:
我正在编写一个 WPF 程序,并试图找出一种方法来通过一些可重复的方法(如样式或模板)来格式化 TextBox 中的数据。我有很多文本框(准确地说是 95 个),每个文本框都绑定到自己的数字数据,每个数字数据都可以定义自己的分辨率。例如,如果数据为 99.123,分辨率为 2,则应显示 99.12。同样,数据值 99 和分辨率 3 应显示为 99.000(不是 99)。有没有办法做到这一点?
编辑: 我应该澄清一下,我正在处理的当前屏幕上有 95 个文本框,但我希望程序中各个屏幕上的每个文本框都能显示正确的小数位数。现在我想起来了,其中一些是 TextBoxes(比如我现在正在处理的屏幕),还有一些是 DataGrids 或 ListViews,但如果我能弄清楚如何让它为 TextBoxes 工作,我相信我能想出它也适用于其他控件。
在这种情况下没有太多代码可以分享,但我会尽量让它更清楚:
我有一个包含以下属性的视图模型 (vb.net):
Public ReadOnly Property Resolution As Integer
Get
Return _signal.DisplayResolution
End Get
End Property
Public ReadOnly Property Value As Single
Get
Return Math.Round(_signal.DisplayValue, Resolution)
End Get
End Property
在 XAML 中我有:
<UserControl.Resources>
<vm:SignalViewModel x:Key="Signal" SignalPath="SomeSignal"/>
</UserControl.Resources>
<TextBox Grid.Column="3" IsEnabled="False" Text="{Binding Path=Value, Source={StaticResource Signal}, Mode=OneWay}" />
EDIT2(我的解决方案): 原来,在离开电脑一段时间后,我回来发现一个简单的答案正盯着我的脸。格式化视图模型中的数据!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
【问题讨论】:
-
使用
IValueConverter?将实际值和分辨率传递给转换器,让它在自己内部为您进行四舍五入。在不知道这 95 个TextBox的确切生成方式的情况下,很难建议StringFormat。 -
发布当前代码和 XAML。否则都是猜测和无益的猜测。
-
我在问题中添加了更多信息,希望能更清楚。
标签: wpf xaml data-binding string-formatting