Wie formatiere ich die Anzahl der Dezimalstellen in WPF mit Stil / Vorlage?
Bin ich ein WPF-Programm schreiben und ich versuche herauszufinden, eine Möglichkeit zum formatieren von Daten in einem Textfeld durch einige wiederholbare Methode, wie ein Stil oder eine Vorlage. Ich habe eine Menge Textfelder (95 um genau zu sein) und jeder ist gebunden an seine eigenen numerischen Daten haben jeweils Ihre eigene Auflösung definiert. Zum Beispiel, wenn die Daten 99.123 mit einer Auflösung von 2 sollte es dann anzeigen, 99.12. Ähnlich einem Daten-Wert von 99 und 3-Auflösung dargestellt werden sollen, 99.000 (nicht 99). Gibt es eine Möglichkeit, dies zu tun?
Edit:
Ich sollte klären, gibt es 95 Textfelder auf dem aktuellen Bildschirm an dem ich arbeite, aber ich wollen, dass jeder TextBox in den verschiedenen Bildschirmen in meinem Programm zur Anzeige der korrekten Anzahl von Dezimalstellen. Jetzt, da ich daran denke, einige von diesen sind Textfelder (wie der Bildschirm an dem ich arbeite jetzt) und einige Datenblätter oder ListViews, aber wenn ich herausfinden kann, wie man es Arbeit für Textfelder, die ich bin sicher, dass ich es herausfinden, die für die anderen Kontrollen auch.
Gibt es nicht viel code zu teilen, in diesem Fall, aber ich werde versuchen, um es klarer:
Ich habe ein View-Modell enthält die folgenden Eigenschaften (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 im 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 stellt sich heraus, dass nach dem gehen Weg von der computer für eine Weile, ich kam zurück zu finden, eine einfache Antwort, starrte mir ins Gesicht. Format der Daten in der Ansicht Modell!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
InformationsquelleAutor der Frage AXG1010 | 2013-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die
StringFormat
auf dieBinding
. Sie können entweder standard-string-Formateoder benutzerdefinierte zeichenfolgenformate:Beachten Sie, dass die
StringFormat
funktioniert nur, wenn die target-Eigenschaft ist vom Typ string. Wenn Sie versuchen, so etwas wie eineContent
Eigenschaft (typeof(object)
), müssen Sie verwenden eine benutzerdefinierteStringFormatConverter
(wie hier), und übergeben Sie Ihre format-string alsConverterParameter
.Bearbeiten aktualisierte Frage
So, wenn Ihr
ViewModel
definiert die Genauigkeit, würde ich empfehlen, dies zu tun, wie einMultiBinding
und erstellen Sie Ihre eigenenIMultiValueConverter
. Das ist ziemlich ärgerlich in der Praxis, gehen von einer einfachen Bindung eine, die erweitert werden muss zu einemMultiBinding
aber wenn die Genauigkeit nicht zur Kompilierzeit bekannt ist, ist dies ziemlich alle, die Sie tun können. IhreIMultiValueConverter
werden müssen, den Wert und die Präzision, und die Ausgabe der formatierten string. Sie wäre in der Lage, dies zu tun mitString.Format
.Aber für Dinge wie eine
ContentControl
können Sie viel leichter tun dies mit einemStyle
:Jedes Steuerelement, das macht einen
ContentStringFormat
kann z.B. so verwendet werden. LeiderTextBox
nicht alles so.InformationsquelleAutor der Antwort Abe Heidebrecht
Akzeptiert die Antwort nicht zeigen 0 in integer Ort auf Anregungen geben, wie 0.299. Es zeigt .3 in WPF UI. Also mein Vorschlag zu verwenden Sie folgende format-string
InformationsquelleAutor der Antwort Manish Dubey
InformationsquelleAutor der Antwort Monali Pawar