Piszę program WPF i próbuję wymyślić sposób formatowania danych w TextBox za pomocą powtarzalnej metody, takiej jak styl lub szablon. Mam wiele pól tekstowych (dokładnie 95) i każdy z nich jest powiązany z własnymi danymi liczbowymi, z których każdy może mieć zdefiniowaną własną rozdzielczość. Na przykład, jeśli dane to 99,123 z rozdzielczością 2, to powinno wyświetlić 99,12. Podobnie wartość danych 99 i rozdzielczość 3 powinny być wyświetlane jako 99.000 (nie 99). Czy jest na to sposób?
Edycja: Powinienem wyjaśnić, na bieżącym ekranie, nad którym pracuję, jest 95 pól tekstowych, ale chcę, aby każdy TextBox na różnych ekranach w moim programie wyświetlał prawidłową liczbę miejsc dziesiętnych. Teraz, gdy o tym myślę, niektóre z nich to TextBoxes (tak jak ekran, nad którym teraz pracuję), a niektóre to DataGrids lub ListViews, ale jeśli mogę dowiedzieć się, jak to działa dla TextBox, jestem pewien, że mogę to zrozumieć to również dla innych kontrolek.
W tym przypadku nie ma zbyt wiele kodu do udostępnienia, ale spróbuję to wyjaśnić:
Mam model widoku, który zawiera następujące właściwości (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
aw XAML mam:
<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 (moje rozwiązanie): Okazuje się, że po pewnym odejściu od komputera wróciłem, aby znaleźć prostą odpowiedź, która patrzyła mi w twarz. Sformatuj dane w modelu widoku!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
IValueConverter
? Przekaż rzeczywistą wartość i rozdzielczość do konwertera i pozwól mu wykonać zaokrąglenie w sobie. Trudno jest zasugerować,StringFormat
nie wiedząc, jak dokładnie te 95TextBox
są generowane.