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
WPF - Window_loaded wird nicht ausgelöst
da_user
myCSharp.de - Member



Dabei seit:
Beiträge: 91
Herkunft: nähe Regensburg

Themenstarter:

WPF - Window_loaded wird nicht ausgelöst

beantworten | zitieren | melden

Hallo,

ich habe ein sehr komisches Problem. Ich bastel gerade an einem kleinen WPF-Projekt. Nach dem öffnen des Hauptbildschirmes soll mir das Dingens aus einer XML-File einen Schwung von Settings holen. Dazu habe ich ein bisschen was selbstgeschriebenes. Mal kurz die Codes:

XAML:
<Window x:Class="MyProgramm.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
[...]
</Window>

C#:


public MainWindow()
{
    InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    settings = new SettingsDialog.Settings();
    MessageBox.Show("Window_Loaded");
}

Das Fenster wird geladen, angezeigt, ich kann es auch bedienen. Aber: das Objekt "settings" bleibt null und es erscheint keine MessageBox (welche ich zu Debug-Zwecken eingefügt habe).
Das Event und die dazugehörige Methode habe ich mit Hilfe des Designers erstellt, da sollte also auch nix schief gelaufen sein.

Habe ich da jetzt irgendwo einen Denkfehler drin? Oder irgendeinen doofen Flüchtigkeitsfehler?
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo da_user,

aus der View geht das glaube ich mit einer Attached Behaviour. Oder du registrierst dich im Konstruktor auf das Event.

Bei dir dann etwa so:


public MainWindow()
{
    InitializeComponent();
    this.Loaded += new RoutedEventHandler(Window_Loaded);
}

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
da_user
myCSharp.de - Member



Dabei seit:
Beiträge: 91
Herkunft: nähe Regensburg

Themenstarter:

beantworten | zitieren | melden

Hi,

das mit dem Konstruktor habe ich gerade eben probiert, Effekt ist der gleiche - keine Meldung, Objekt == null.

Da ich ja dieses Event und die dazugehörige Methode durch den Designer hab erstellen lassen, sollte da ja eigentlich auch nix schief gelaufen sein.

Zur Sicherheit habe ich das übrigens gerade nochmal gemacht. Funktioniert auch nicht

Und dann einmal mit Window_initialized. Das klappt, da bekomme ich die Meldung. Dafür verschluckt sich irgendwas am XAML-Reader, wenn ich meine XML-Datei auslese ;-)
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo da_user,

das mit dem Window_Loaded geht bei mir in einem nackten Projekt einwandfrei.

Wieso machst dus nicht via DataContext/MVVM und machst das Laden der Settings in deinem Konstruktor des VMs?

Gurss

Coffeebean
private Nachricht | Beiträge des Benutzers
da_user
myCSharp.de - Member



Dabei seit:
Beiträge: 91
Herkunft: nähe Regensburg

Themenstarter:

beantworten | zitieren | melden

Ich wollte es bei diesem kleinen Projekt noch so machen, bevor ich mich in das MVVM-Zeug einarbeite. Aber wird mir wohl doch nix anderes übrig bleiben :(
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo da_user,

mach es gleich richtig. Wenn man mit einem kleinen Projekt anfängt etwas neues zu lernen, dann ist das X mal einfacher als bei einem grossen.

Daher: Mach es richtig und wag dich dran. MVVM ist kein Teufelszeug. Im Gegenteil ;)

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Hallo,
Zitat von da_user
Das Fenster wird geladen, angezeigt, ich kann es auch bedienen. Aber: das Objekt "settings" bleibt null und es erscheint keine MessageBox (welche ich zu Debug-Zwecken eingefügt habe).
Zitat von da_user
Dafür verschluckt sich irgendwas am XAML-Reader, wenn ich meine XML-Datei auslese

Das zweite ist der Grund für's erste: In Deinem "settings = new SettingsDialog.Settings();" tritt eine Exception auf, die dazu führt, dass settings nicht gesetzt und die MessageBox nicht angezeigt wird.

Nebenbei bemerkt ist die MessageBox eher keine gute Technik zum Debuggen. Willst Du wissen, ob das Programm durch Window_Loaded kommt, setzt Du da an den Anfang (wie auch die MessageBox oder Logging am Anfang hilfreicher gewesen wäre) einen Haltepunkt. Siehe auch: [Artikel] Debugger: Wie verwende ich den von Visual Studio?
private Nachricht | Beiträge des Benutzers