我正在编写WPF程序,试图通过某种可重复的方法(例如样式或模板)来找到在TextBox中格式化数据的方法。我有很多TextBox(准确地说是95个),每个TextBox都绑定到自己的数字数据,每个数字数据都可以定义自己的分辨率。例如,如果数据是分辨率为2的99.123,则应显示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
?将实际值和分辨率传递给转换器,让它在您内部进行舍入。如果StringFormat
不知道这95到底TextBox
是如何生成的,很难提出一个建议。