Ich schreibe ein WPF-Programm und versuche herauszufinden, wie Daten in einer TextBox mithilfe einer wiederholbaren Methode wie einem Stil oder einer Vorlage formatiert werden können. Ich habe viele TextBoxen (95 um genau zu sein) und jede ist an ihre eigenen numerischen Daten gebunden, für die jeweils eine eigene Auflösung definiert werden kann. Wenn die Daten beispielsweise 99,123 mit einer Auflösung von 2 sind, sollte sie 99,12 anzeigen. Ebenso sollte ein Datenwert von 99 und Auflösung 3 als 99.000 (nicht 99) angezeigt werden. Gibt es eine Möglichkeit, dies zu tun?
Bearbeiten: Ich sollte klarstellen, dass sich auf dem aktuellen Bildschirm, an dem ich arbeite, 95 Textfelder befinden, aber ich möchte, dass jedes Textfeld auf den verschiedenen Bildschirmen in meinem Programm die richtige Anzahl von Dezimalstellen anzeigt. Nun, da ich darüber nachdenke, sind einige davon TextBoxen (wie der Bildschirm, an dem ich gerade arbeite) und andere DataGrids oder ListViews, aber wenn ich herausfinden kann, wie es für TextBoxen funktioniert, kann ich es sicher herausfinden es auch für die anderen Kontrollen.
In diesem Fall gibt es nicht viel Code zum Teilen, aber ich werde versuchen, es klarer zu machen:
Ich habe ein Ansichtsmodell, das die folgenden Eigenschaften enthält (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
und in der XAML habe ich:
<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 (meine Lösung): Es stellte sich heraus, dass ich, nachdem ich eine Weile vom Computer weggegangen war , zurückkam, um eine einfache Antwort zu finden, die mich ins Gesicht starrte. Formatieren Sie die Daten im Ansichtsmodell!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
IValueConverter
? Übergeben Sie den tatsächlichen Wert und die Auflösung an den Konverter und lassen Sie ihn für sich selbst aufrunden. Es ist schwer, eine vorzuschlagen,StringFormat
ohne zu wissen, wie genau diese 95erTextBox
erzeugt werden.