Laden...

Runtime Culture ändern, aber nur für einzelne Elemente (MVVM)

Erstellt von echdeneth vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.479 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren
Runtime Culture ändern, aber nur für einzelne Elemente (MVVM)

Hallo, ist nicht ganz einfach mein Problem zu erläutern.

In meiner View hat es mehrere Textboxen, und u.a. eine Combo mit 3 Währungen drin.
Nun möchte ich NUR in dieser Box und NUR die Währung ändern je nach dem welche in der Combo eingestellt ist. Leider nimmt ConverterCulture nur "DE-de" an.

Hat jemand eine Idee?

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

16.806 Beiträge seit 2008
vor 4 Jahren

Vermute, dass hier je nachdem mehrere Art und Weisen in Frage kommen:

  • Custom Format in Binding
  • Eigener IValueConverter mit entsprechend spezifischer Culture-Information
    .. bestimmt noch mehr

Vermute aber auch, dass Du mit dem Bedarf nicht der Erste bist und sicher 10000 Varianten auf Google findest 😃
Kannst die passenden Treffer ja hier posten.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Vermute, dass hier je nachdem mehrere Art und Weisen in Frage kommen:

  • Custom Format in Binding

             <Binding Path="NettoWert"
                         StringFormat="C"
                         ConverterCulture="PL-pl"/>

ConverterCulture nimmt keine DynamicRes. oder sonst irgendwas an nur CultureInfos

  • Eigener IValueConverter mit entsprechend spezifischer Culture-Information
    .. bestimmt noch mehr

Nach dem IValueC. schaue ich mal

Vermute aber auch, dass Du mit dem Bedarf nicht der Erste bist und sicher 10000 Varianten auf Google findest 😃
Kannst die passenden Treffer ja hier posten.

zum 1. Wahrcheinlich nicht, leider nicht - was ich vorhabe ist zu spezifisch, hab ich schon - ich weiss nicht mal wie ich formulieren soll
2. Auf jeden Fall

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.657 Beiträge seit 2006
vor 4 Jahren

ich weiss nicht mal wie ich formulieren soll

Das ist aber das Wichtigste. Ich kann dir jedenfalls nicht folgen. Ich weiß nur, es gibt Textfelder und ComboBoxen, und irgendwo soll eine Währung dynamisch geändert werden. Wenn du es nicht beschreiben kannst, zeig wenigstens mal einen Screenshot.

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

...zeig wenigstens mal einen Screenshot.

Da würde man auch nur Textfelder (wo man den Betrag eingibt) und Combos (z.B. mit der Währung) sehen.

Ich habe eine Page in der u.a. ein Geldbetrag eingegeben werden kann. Diese Textbox (und die Währungs-Combo) hat ein Binding zu einee MVVM-Klasse.
ALs NuGet habe ich MaterialDesignThemes von James Willock verwendet.
Die Anzeige der Währung erfolgt w. o. beschrieben durch "StringFormat=C".
Nun möchte ich gerne, dass wenn ich in der Combo irgendeine Währung auswähle, das Voreingestellte Language="DE-de" ersetzt wird oder das ich in irgendwiner anderen Form das "€" in jenes Währungssymbol einstelle die dazu passt.
Es soll nicht die CultureInfo der ganzen Seite geändert (z.B. Ein Kalender oder DatePicker - immer "DE-de") werden, sondern ausschließlich in den erforderlichen Controls.

Auch ein simples Hinzufügen des Währungssymbols zu dem Betrag (ist ein decimal) wäre annehmbar, oder jedwede andere Variante damit z. B. statt 100,00 €, 100,00 Z? steht.

Es (€, Z?) darf eben nur nicht in der Property für den Betrag stehen.

Besser kann ich es nicht darlegen.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.657 Beiträge seit 2006
vor 4 Jahren

Wenn ich es richtig verstehe, hast du ja das Währungssymbol bereits durch die Auswahl in der ComboBox. Dann brauchst du doch nur den Währungsbetrag mit einem Custom-Format formatieren, wie von Abt beschrieben.

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Nein, in der Combo für die Währung steht: EUR, PLN, CZK
Nach dem Betrag soll dann stehen 100,00 € u.s.w.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

4.931 Beiträge seit 2008
vor 4 Jahren

Wie soll das System denn automatisch von "EUR" auf "€" schließen?

Wenn du die Culture aber angibst, dann kannst du mittels new Culture(culture).NumberFormat.CurrencySymbol das dazugehörige Währungssymbol auslesen.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Wie soll das System denn automatisch von "EUR" auf "€" schließen?

Über eine Abfrage/Methode im ViewModel

Wenn du die Culture aber angibst, dann kannst du mittels new Culture(culture).NumberFormat.CurrencySymbol
das dazugehörige Währungssymbol auslesen.

Das Problem ist weder das Anzeigen noch das Auslesen des Währungssymbols.
Etwas oberhalb im XAML-Code siehst du wie ich das Währungssymbol momentan anzeige.
Es wahrscheinlich gäbe noch andere Varianten. Da ich Binding und MVVM benutze,
kann ich beim Symbol nicht über sowas wie wert += währungssymbol verwenden.

Aber ich werde mir Format in Bindings mal genauer ansehen

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

4.931 Beiträge seit 2008
vor 4 Jahren

Du kannst doch einfach im ViewModel eine weitere Eigenschaft erstellen, welche wert + währungssymbol als string zurückgibt und daran dann binden.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Du kannst doch einfach im ViewModel eine weitere Eigenschaft erstellen, welche wert + währungssymbol als string zurückgibt und daran dann binden.

Stimmt... die Eigenschaft muss nicht im Model sein, sondern wird nur zum Anzeigen des Wertes + Währung verwendet.

Danke, probiere ich

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein