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

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: 3977
Erhaltene Danke: 813

Win7
C++, C# (VS 2015/17)
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: 130

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: 130

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 05.02.18 13:24 
Es ist nicht sonderlich hilfreich, wenn sich jemand einen Codeausschnitt von irgendwo holt, diesen anwendet, und bei unerwarteten Ergebnissen meint - es funktioniert nicht.
Was funktioniert denn nicht? Was soll die Methode deiner Meinung nach machen, und was kommt tatsächlich dabei heraus?
Ebenso schwierig nachzuvollziehen sind Hinweise wie:
Zitat:
Allerdings musste ich feststellen, dass nur dinge die geladen worden sind dadrüber angesprochen werden können.

Was für "Dinge", und was ist mit "angesprochen" gemeint?
Zitat:
Und ich kann mir nicht vorstellen das dort Nicht geladene Codeteile darüber aktualisiert werden.

Was sind denn Codeteile, die nicht geladen sind/werden?
Zitat:
Und besonders verschachtelte ViewModels sind so nicht zu erreichen, z.B. Listen in VM.

Sind diese Listen, Felder, Eigenschaften oder Methoden mit dem Rückgabewert List<>?

Damit du auch weisst, was dein Code macht, solltest du dich schlau machen über:
- FieldInfo
- DependencyProperty
- BindingExpression
- VirtualTreeHelper

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
m.keller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 05.02.18 14:26 
Eigenschaften solltest du auch mit der PropertyInfo() auslesen. Nicht viel anders als die FieldInfo bislang. Und warum die ViewModel-Collection? Du brauchst doch nur ein ViewModel, das je nach Auswahl die jeweilige Sprache/Model erzeugt.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
m.keller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 06.02.18 03:42 
Was sind denn bei dir Verschachtelungen? Das hier ist z.B. eine "Verschachtelung" von Schleifen:

ausblenden C#-Quelltext
1:
2:
3:
for (int i = 0; i < someLength; i++)
    for (int j = 0; j < someLength; j++)
        someThing[i][j] = null;

Zeig uns doch etwas von deinem Code, insbesondere die Stelle, an der es Probleme gibt. Mit so einer oberflächlichen Beschreibung werden wir nicht weiter kommen. :nixweiss:

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)