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?
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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 😉
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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 😦
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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?