J'écris un programme WPF et j'essaie de trouver un moyen de formater les données dans une zone de texte via une méthode répétable comme un style ou un modèle. J'ai beaucoup de TextBoxes (95 pour être exact) et chacune est liée à ses propres données numériques qui peuvent chacune avoir leur propre résolution définie. Par exemple, si les données sont 99,123 avec une résolution de 2, elles doivent afficher 99,12. De même, une valeur de données de 99 et une résolution de 3 doivent être affichées sous la forme 99 000 (et non 99). Y a-t-il un moyen de faire cela?
Edit: Je devrais clarifier, il y a 95 TextBoxes sur l'écran actuel sur lequel je travaille, mais je veux que chaque TextBox des différents écrans de mon programme affiche le nombre correct de décimales. Maintenant que j'y pense, certains d'entre eux sont des TextBoxes (comme l'écran sur lequel je travaille maintenant) et d'autres sont des DataGrids ou ListViews, mais si je peux comprendre comment le faire fonctionner pour les TextBoxes, je suis sûr que je peux comprendre aussi pour les autres contrôles.
Il n'y a pas beaucoup de code à partager dans ce cas, mais je vais essayer de le clarifier:
J'ai un modèle de vue qui contient les propriétés suivantes (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
et dans le XAML j'ai:
<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 (ma solution): Il s'avère qu'après s'être éloigné de l'ordinateur pendant un moment, je suis revenu pour trouver une réponse simple qui me regardait en face. Formatez les données dans le modèle de vue!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
IValueConverter
? Transmettez la valeur réelle et la résolution au convertisseur et laissez-le faire l'arrondi pour vous en lui-même. Il est difficile de suggérer unStringFormat
sans savoir exactement comment ces 95TextBox
sont générés.