Objekt "Content" und "Text" lässt sich nicht aktualisieren

  • WPF

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    Objekt "Content" und "Text" lässt sich nicht aktualisieren

    Hallo Leute,

    folgendes Problem:

    Ich habe eine Form "MainWindow" und eine Form "SettingsWindow".
    Nun lasse ich von SettingsWindow aus einen Delegaten starten, welcher dann eine Funktion in MainWindow starten soll.
    Hierbei geht es um eine Übergabe mit einem Byte.

    Mein Delegate (Er ist außerhalb der Klasse SettingsWindow platziert)

    C#-Quellcode

    1. public delegate void GlobalozationEvent(byte language);


    Der Button der es auslöst

    C#-Quellcode

    1. private void button_Click(object sender, RoutedEventArgs e)
    2. {
    3. changelanguage(0);
    4. }


    Die Funktion

    C#-Quellcode

    1. private void changelanguage(byte lang)
    2. {
    3. //Language Byte
    4. //byte newLanguage = Properties.Settings.Default._language_byte;
    5. //Window Instances
    6. MainWindow MainWindow_Globalization = new MainWindow();
    7. //Delegate declaration
    8. GlobalozationEvent startglobalization = new GlobalozationEvent(MainWindow_Globalization.startLocalization);
    9. //Event sending
    10. startglobalization(lang);
    11. SettingsWindowLocalization(lang);
    12. //Closing Instances
    13. MainWindow_Globalization.Close();
    14. }


    Die auszuführende Funktion

    C#-Quellcode

    1. public void startLocalization(byte lang)
    2. {
    3. MainWindowLocalization(lang);
    4. }


    Beim Debuggen stellt sich heraus, dass die Funktion auch aufgerufen wird, und jeder Befehl ausgeführt wird. Also z.B. label_test.content = "Anderer Text";
    Heißt ja, der View oder so aktualisiert sich nicht oder?

    Mit dem Dispatcher hab ich's auch schon (im Rahmen meines Wissens) probiert

    C#-Quellcode

    1. Dispatcher.Invoke(new Action(() => this.button_MainWindo_Settings.Content = localization_en.GetString("MainWindow_Button_Settings")));


    EDIT:
    Gerade kam mir die Idee, da ich ja theoretisch nur den Inhalt der Instanz ändere, vielleicht liegt es daran.
    Wie kann ich dann das ganze an der "Haupt Instanz" ändern, ohne eine neue Instanz erstellen zu müssen?

    Hat jemand ne Idee wo ich ansetzen kann?

    Danke im vorraus.

    DaNeubi
    Ich kann's auf Anhieb nur mit VB beschreiben, aber wenn Du das SettingsWindow per ShowDialog(Me) aufrufst, hat das SettingsWindow die Property Owner, und die ist mit MainWindow besetzt. Notfalls n DirectCast in MainWindow-Typ machen, dann kannst Du auf die Public-Members der laufenden Instanz von MainWindow zugreifen.
    Aber ich vermute mal, dass gleich @RodFromGermany kommt, ggf. auf seinen Thread "Dialoge richtig instanziieren" verweist (was ich hiermit schon mal prophylaktisch gemacht habe) und nen besseren Vorschlag im Sortiment hat.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Wenn ich das richtig verstehe, hast du das Problem, dass sich der Content von button_MainWindo_Settings beim Aufruf nicht ändert, nachdem der Code ausgeführt wurde, ist das richtig?

    Sonstige Anmerkungen:
    Nimm statt byte int, wenn du byte nur genommen hast, weil du denkst, dass das schneller ist und du damit weniger Speicherplatz verbrauchst.
    WPF mehrsprachig zu machen ist eigentlich sehr einfach und braucht nicht so komischen Code. Du kannst einfach ein ResourceDictionary erstellen, in dem du die ganzen Strings aufbewahrst und dann direkt über DynamicResource auf diese Verweisen, dann brauchst du diesen ganzen control.Text = "" Code nicht, sondern musst, um die Sprache zu verändern, einfach das Dictionary ersetzen und die Texte ändern sich in allen Fenster automatisch.
    Mfg
    Vincent