none
WPF Label contentStringFormat RRS feed

  • Frage

  • Hallo,

    ich möchte eine Variable vom Typ double in einen Label mit 2nachkommastellen darstellen. funktioniert aber nicht...

    es wird nur 0.1 dargestellt, sollte aber 0.10 sein...

    Bin über jeden Tip dankbar

    <StackPanel Height="Auto">
            <Label x:Name="theLabel" Content="{Binding Path = Name}" ContentStringFormat="{}{0:N2}" />
            <Button Content="Click me" Click="Button_Click" />
        </StackPanel>

    namespace WpfApplication2 { /// <summary> /// Interaktionslogik für MainWindow.xaml /// </summary> public partial class MainWindow : Window { TestObject t = new TestObject(); public MainWindow() { InitializeComponent(); theLabel.DataContext = t; } private void Button_Click(object sender, RoutedEventArgs e) { double d = 0.1; t.Name = d; } } }

    class TestObject : INotifyPropertyChanged
        {
            private string _name;
    
            public string Name
            {
                get
                {
                    return _name;
                }
    
                set
                {
                    if (_name == value) return;
    
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
    
            #region INotifyPropertyChanged Members
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected virtual void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
            #endregion
        }

    Mittwoch, 9. November 2016 07:03

Antworten

Alle Antworten

  • Hi,
    der übliche und gut funktionierende Weg dafür ist die Bindung der Content-Eigenschaft des Label-Steuerelementes an eine Eigenschaft vom Typ Double mit einem zwischengeschalteten Konverter. Die Konverter-Klasse implementiert das IValueConterter Interface. Damit wird beim Abruf des Double-Wertes dieser in eine Zeichenkette umgewandelt. Dabei kann auch die Kultur berücksichtigt werden, um in unterschiedlichen Kulturen die entsprechende Darstellung zu erzeugen (z.B. Dezimalpunkt oder Dezimalkomma).

    --
    Viele Grüsse
    Peter Fleischer (MVP Reconnect, Partner)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 9. November 2016 07:25
  • Hallo,

    "N2" gilt nur für Zahlen, nicht für Zeichenketten, siehe Standardmäßige Zahlenformatzeichenfolgen.

    Also entweder änderst Du den Datentyp von Name in Double oder Decimal oder aber Du "formatierst" den Text selbst, denn für Zeichenketten gibt es solche Optionen nicht. Das Ändern in einen Zahlendatentyp sei angeraten, wenn damit, neben der Anzeige, auch gerechnet werden soll.

    Gruß Elmar

    Mittwoch, 9. November 2016 07:30
  • Funktioniert!

    Vielen dank

    Mittwoch, 9. November 2016 15:06