Autor Beitrag
m.keller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win xp, Win 7
C# (VS 2008)
BeitragVerfasst: Mi 31.01.18 12:02 
Hallo Entwicklergemeinde,

wie ist die Sinnvoll Herangehensweise für eine Mehrsprachige Anwendung in WPF wenn die Enum's und weitere Objecte über Converter übersetzt werden.
Die Sprachumschaltung usw. ist komplett Realisiert.
Aber wenn die Sprache umgeschaltet wurde, beleiben alle Texte auf der vorigen Sprache die vorher mit einem Converter eingebunden worden sind.

Wie erreiche ich das in WPF diese Texte und Werte neu gezeichnet werden?
Ein OnPropetyChanged würde auch funktionieren, aber das müsste dann über alle Control erreicht werden.
Hat da jemand eine Idee?

_________________
Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 31.01.18 13:17 
Vllt. hilft dir Refresh a controls binding in Silverlight or WPF without using PropertyChanged? Du müßtest das dann rekursiv für alle Controls aufrufen.

Oder PropertyChanged mit "" aufrufen, s.a. Is there a way to refresh all bindings in WPF?
m.keller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win xp, Win 7
C# (VS 2008)
BeitragVerfasst: Mi 31.01.18 14:48 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Vllt. hilft dir Refresh a controls binding in Silverlight or WPF without using PropertyChanged? Du müßtest das dann rekursiv für alle Controls aufrufen.

Oder PropertyChanged mit "" aufrufen, s.a. Is there a way to refresh all bindings in WPF?


Also Das Funktioniert leider alles nicht.
Ich habe im MVVM kein Zugriff auf die Controls und auch das PropetyChanged geht nicht durch.

Ich hatte schon mal was gelesen mit VisualTree durch zu iterieren.
Habe aber kein sinnvolles Beispiel bis jetzt gefunden.

Das Problem muss doch eigentlich vielen bekannt sein oder?
Es gibt doch genug Software auf dem Markt die im Laufenden Zustand die Sprache ändern können.

_________________
Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
m.keller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win xp, Win 7
C# (VS 2008)
BeitragVerfasst: Mo 05.02.18 11:43 
Alos die Enum's sind nun übersetzbar.
Erst dachte ich es funktioniert alles super.
Allerdings musste ich feststellen, dass nur dinge die geladen worden sind dadrüber angesprochen werden können.
Und besonders verschachtelte ViewModels sind so nicht zu erreichen, z.B. Listen in VM.Die angezeigten Listen werden in Textboxen nicht aktualisiert, somit wird der Dezimaltrennung nicht passend ausgetauscht.

Hat zufällig da jemand eine Idee?

Hier der Code:
GetBindingExpression – a good way to iterate over all dependency properties in visual tree in Silverlight 3?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
        private void BuildBindingList(FrameworkElement element)
        {
            FieldInfo[] infos = element.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static);
            foreach (FieldInfo field in infos)
            {
                if (field.FieldType == typeof(DependencyProperty))
                {
                    DependencyProperty dp = (DependencyProperty)field.GetValue(null);
                    BindingExpression ex = element.GetBindingExpression(dp);

                    if (ex != null)
                    {                       
                        ex.UpdateTarget();
                    }
                }
            }
            
            int children = VisualTreeHelper.GetChildrenCount(element);
            for (int i = 0; i < children; i++)
            {
                FrameworkElement child = VisualTreeHelper.GetChild(element, i) as FrameworkElement;
                if (child != null)
                {
                    BuildBindingList(child);
                }
            }
            
        }

Wie über den Link zu sehen gibt es auch eine Möglichkeit über die Assamply dieses zu realisieren.
Nur funktioniert das bei mir nicht wirklich. Und ich kann mir nicht vorstellen das dort Nicht geladene Codeteile darüber aktualisiert werden.

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.

_________________
Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 05.02.18 13:24 
- Nachträglich durch die Entwickler-Ecke gelöscht -
m.keller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win xp, Win 7
C# (VS 2008)
BeitragVerfasst: Mo 05.02.18 13:35 
Ja du hast schon recht ich habe mich nicht klar ausgedrückt.
War zu stark in meinem Saft gefangen.

Alos ich nutze Prism, und wenn ich das richtig verstanden habe werden z.b. nicht alle Tabs dort geladen sondern nur vorbereitet, bis zu dem punkt wenn der User auf einen weiteren Tab klickt. Dann wird erst dieser Tab vollständig aufgebaut gezeichnet und die Bindings hergestellt.


Ich meinte damit, dass diese Dialoge die nicht geladen sind, dann auch nicht über Bindings verändert werden können. Weil sie nicht existieren.

Es sind einzelne ViewModels die in einer ObservableCollection abgelegt sind. Dieses ObservableCollection ist als Eigenschaft deklariert.

_________________
Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 05.02.18 14:26 
- Nachträglich durch die Entwickler-Ecke gelöscht -
m.keller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win xp, Win 7
C# (VS 2008)
BeitragVerfasst: Mo 05.02.18 14:49 
Über PropertyInfo() wir nichts mehr aktualisiert.

Mit FieldInfo geht es bedingt schon mal. Aber die Verschachtelten Daten werden nicht mit aktualisiert.
Es sind ViewModel Kombinationen weil dadurch eine Flexibilität erreicht wird.
Es sind einige Verschachtelungen im View um eine Kombination aus verschieden Dynamisch Werten zu erreichen.
Aber du hast schon recht, es gibt für jeden Dialog ein ViewModel,aber manche beinhalten eine Kombination aus weiteren um daraus eine liste von Werten zu erhalten.

Im Endeffekt mache ich mit dieser Methode nichts anderes wie über alle Elemente zu Iterieren und dort die einzelnen Elemente über die Bindings zu Aktualisieren.
Leider Findet ich mit dieser Methode nicht alle Bindings.

_________________
Der gesunde Menschenverstand ist nur eine Anhäufung von Vorurteilen, die man bis zum 18. Lebensjahr erworben hat. (Albert Einstein)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 06.02.18 03:42 
- Nachträglich durch die Entwickler-Ecke gelöscht -