Estou escrevendo um programa WPF e estou tentando descobrir uma maneira de formatar dados em um TextBox por meio de algum método repetível como um estilo ou modelo. Eu tenho muitos TextBoxes (95 para ser exato) e cada um está vinculado a seus próprios dados numéricos, cada um com sua própria resolução definida. Por exemplo, se os dados são 99,123 com uma resolução de 2, ele deve exibir 99,12. Da mesma forma, um valor de dados de 99 e resolução 3 deve ser exibido como 99.000 (não 99). Existe uma maneira de fazer isso?
Edit: Devo esclarecer, há 95 TextBoxes na tela atual em que estou trabalhando, mas quero que cada TextBox das várias telas do meu programa exiba o número correto de casas decimais. Agora que penso sobre isso, alguns deles são TextBoxes (como a tela em que estou trabalhando agora) e alguns são DataGrids ou ListViews, mas se eu conseguir descobrir como fazê-los funcionar para TextBoxes, tenho certeza que posso descobrir para os outros controles também.
Não há muito código para compartilhar neste caso, mas tentarei deixar isso mais claro:
Eu tenho um modelo de visualização que contém as seguintes propriedades (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
e no XAML eu tenho:
<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 (minha solução): Acontece que, depois de me afastar do computador por um tempo, voltei para encontrar uma resposta simples que estava me encarando. Formate os dados no modelo de visualização!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
IValueConverter
? Passe o valor real e a resolução para o conversor e deixe-o fazer o arredondamento para você dentro dele mesmo. É difícil sugerir umStringFormat
sem saber exatamente como esses 95TextBox
são gerados.