我正在编写一个 WPF 程序,试图找到一种像样式或模板这样可重复的方法来格式化 TextBox 中的数据。我有许多 TextBoxes(确切地说是 95 个),每个都绑定到自己的数值数据,每个数据可以定义自己的分辨率。例如,如果数据为 99.123,分辨率为 2,则应显示为 99.12。同样,数据值为 99,分辨率为 3,则应显示为 99.000(而非 99)。有没有办法做到这一点?
编辑: 我应该澄清一下,在我正在工作的当前屏幕上有 95 个 TextBox,但我希望我的程序中各个屏幕上的每个 TextBox 都能显示正确的小数位数。现在我想起来了,其中一些是 TextBox(如我正在工作的屏幕),一些是 DataGrids 或 ListViews,但如果我能够弄清楚如何使 TextBox 工作,我相信我也能找出其他控件的解决方法。
在这种情况下,没有太多要分享的代码,但我会尽力让它更加清晰:
我有一个包含以下属性的视图模型(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}" />
编辑2(我的解决方案): 事实证明,在离开电脑一段时间后,我回来发现一个简单的答案直接呈现在我的面前。在视图模型中格式化数据!
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
。 - Viv