In XAML möchte ich StringFormat verwenden, um einen numerischen Wert ohne Rundung anzuzeigen. Ist es möglich?

8

Also in meinem XAML habe ich das:

%Vor%

Wenn der Wert von MyDecimalProperty beispielsweise 5.35570256 ist, dann ist der angezeigte TextBlock-Wert 5.356

Gibt es eine Möglichkeit, den Textblock stattdessen mit 5.355 anzuzeigen (d. h., um die Zahl abzuschneiden anstatt sie zu runden), indem Sie StringFormat verwenden?

Ich weiß, dass ich einen Wertkonverter verwenden kann, aber ich wollte wissen, ob ich StringFormat oder etwas anderes, das im XAML definiert ist, verwenden kann, um dasselbe zu erreichen.

Aktualisieren : Die Leute fragen sich, warum ich keinen Konverter benutzen will. Bitte lesen Sie oben fett. Es ist nicht so, dass ich nicht will; Ich wollte nur wissen, ob ich dasselbe mit StringFormat oder einem anderen XAML-Konstrukt machen kann.

Danke.

    
tolism7 04.08.2015, 16:20
quelle

3 Antworten

1
  

wenn ich StringFormat oder irgendetwas anderes, das im XAML definiert ist, verwenden kann, um dasselbe zu erreichen

StringFormat ist spezifisch für die Binding Markup Extension (eigentlich die bindende Basis BindingBase. StringFormat-Eigenschaft (System.Windows.Data) ) und verwendet letztendlich die String-Formatierung von .Net, z. B. ToString("G3") (siehe Standard-Zahlenformat-Strings ), die Runden und nicht abgeschnitten; Es ist also nicht möglich, solche Features in Xaml zu überschreiben.

Erstellen Sie eine weitere Eigenschaft im Viewmodel, die einem zugeordneten string -Typ zugeordnet ist, der den gewünschten Wert einfach parkt, aber abgeschnitten wird. Dann binden Sie als solche.

ViewModel

%Vor%

Xaml

%Vor%

Ergebnis

    
OmegaMan 06.08.2015, 16:15
quelle
3

Ich glaube nicht, dass Sie dies einfach mit StringFormat tun können. Gibt es einen Grund, warum Sie keinen Konverter verwenden möchten? (siehe unten).

Konverter:

%Vor%

Verwendung:

%Vor%     
d.moncada 04.08.2015 17:23
quelle
3

Wenn Sie keinen Konverter verwenden möchten (ich weiß nicht warum, aber Sie haben Gründe), können Sie den zurückgegebenen Typ Ihrer Bindungsquelle ändern und dann IFormattable Schnittstelle.

Sehen Sie sich dieses Beispiel an. Zuallererst sollte Ihr MyDecimalProperty keine Dezimalzahl mehr ausgeben. Sie sollten es ändern, um ein TruncatedDecimal zurückzugeben. Hier sein Code:

%Vor%

Jetzt können Sie in Ihrem XAML die Formatzeichenfolge verwenden, die Sie benötigen:

%Vor%

Also, zum Beispiel, wenn der DataContext auf diese Weise gesetzt ist:

%Vor%

Sie sehen 0.49978 . Ich hoffe, dass diese Lösung für Ihre Bedürfnisse geeignet ist und Ihnen helfen kann.

    
Il Vic 06.08.2015 13:47
quelle

Tags und Links