Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Warum ist String in Währung formatieren im XAML anders als im ViewModel?
CoderboyPB
myCSharp.de - Member



Dabei seit:
Beiträge: 291
Herkunft: Paderborn

Themenstarter:

Warum ist String in Währung formatieren im XAML anders als im ViewModel?

beantworten | zitieren | melden

Hallo, wenn ich die Zahl (Decimal) wie folgt konvertiere

<TextBlock Text="{Binding RetailPrice, StringFormat='{}{0:C}'}" />

erhalte ich eine amerikanische Preisangabe mit einem Dollarzeichen vor dem Betrag.

Füge ich aber dem Display Model eine Property, wie folgt zu


public string RetailPriceDisplay
        {
            get => RetailPrice.ToString("C");
        }

und binde den TextBlock auf diese Property OHNE StringFormat Attribut, dann bekomme ich die Ausgabe in € (mit Euro Zeichen hinter dem Betrag)

So, und jetzt die alles entscheidende Frage:
WARUM ist das so? Warum werden hier verschiedene Cultures verwendet?
(Die XAML Formatierung habe ich aus einem amerikanischen Video)
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 233
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Hallo,

siehe Hinweise von Binding.ConverterCulture Eigenschaft.


Edit:
Du hast fast die gleiche Frage schonmal gestellt und eine Antwort bekommen, wie man diese umstellt.
Vielleicht sollte man mit klarem Kopf und ausgeschlafen an die Sache rangehen

Grüße spooky
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Spook am .
private Nachricht | Beiträge des Benutzers
CoderboyPB
myCSharp.de - Member



Dabei seit:
Beiträge: 291
Herkunft: Paderborn

Themenstarter:

beantworten | zitieren | melden

Ausgeschlafen war ich fast, aber auch wenn ich noch zu 100 % wach gewesen wäre, wäre ich im Leben nicht drauf gekommen, dass .NET in der String Formatierung die eingestellte Culture benutzt, während dessen bei der XAML Formatierung per default us-eng benutzt wird, anstatt die, die auf meinem Rechner eingestellt ist ...

Das erinnert mich an Corona und den - nach heutigen Erkenntnissen - unnötigen Lockdown:
Sowas muss man erst wissen, bevor man es richtig macht.


Ich danke dir an dieser Stelle, dass du mich in dieses Wissen eingeweiht, und mir dieses Mysterium erklärt hast.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1427
Herkunft: Düsseldorf

beantworten | zitieren | melden

Das hängt damit zusammen, dass Du in WPF getrennt nochmal die Sprache einstellen kannst, dafür gibt es die Language-Property.
Ich vermute, das hat den Hintergrund, dass man Logik und UI trennen will, denn die Logik könnte die statischen Properties (CurrentCulture und CurrentUICulture) an der CultureInfo ändern, was ebenfalls zu potentiell ungewollten Änderungen der UI führen würde.

Man könnte einmal im Window im Konstruktor folgendes machen:

Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag);
Das sollte dann global für alles andere gelten
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 233
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Oder, falls gewünscht global, mit diesem Code (siehe auch verlinkter Post):

            FrameworkElement.LanguageProperty.OverrideMetadata(
                typeof(FrameworkElement),
                new FrameworkPropertyMetadata(
                    XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

Kannst du z.B. im Ctor/OnStartup deiner Application-Klasse aufrufen.

Grüße
private Nachricht | Beiträge des Benutzers