Laden...

WPF - Window_loaded wird nicht ausgelöst

Erstellt von da_user vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.608 Views
D
da_user Themenstarter:in
94 Beiträge seit 2008
vor 9 Jahren
WPF - Window_loaded wird nicht ausgelöst

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?

2.207 Beiträge seit 2011
vor 9 Jahren

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

D
da_user Themenstarter:in
94 Beiträge seit 2008
vor 9 Jahren

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 😉

2.207 Beiträge seit 2011
vor 9 Jahren

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

D
da_user Themenstarter:in
94 Beiträge seit 2008
vor 9 Jahren

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 😦

2.207 Beiträge seit 2011
vor 9 Jahren

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

U
1.688 Beiträge seit 2007
vor 9 Jahren

Hallo,

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).

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?