ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
607
607
EMPFEHLEN
-
23.12.09 17:47 #1
- Registriert seit
- Aug 2009
- Beiträge
- 11
Ich habe das Problem dass während "InitializeComponent()" ein Event gefeuert und dadbei in der Codebehind-Datei auf ein noch nicht initialisiertes Objekt zugegriffen wird.
=> NullReferenceException
Hier mal ein Minimalbeispiel. Und bitte keine Diskussionen über den Sinn dieses Beispiels.
Der XamlCodeCode :1 2 3 4 5 6 7 8 9 10 11 12
<Window.Resources> <local:Wetter x:Key="_wetter" /> </Window.Resources> <StackPanel> <Slider Name="_slider" Minimum="-20" Maximum="30" Value="-5" ValueChanged="_slider_ValueChanged"> </Slider> </StackPanel>
CodebehindCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
private Wetter _wetter; public Window1() { InitializeComponent(); _wetter = this.FindResource("_wetter") as Wetter; } private void _slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { if ((sender as Slider).Value < 0) { //Hier kracht es weil _wetter null ist _wetter.AktuellerStatus = Temperaturstatus.Arschkalt; } }
Das Problem ist eben dass die Resource gar nicht erst zugewiesen wird.
Lösungsansatz 1:
Die Resource VOR der Initialisierung in der Codebehind-Datei zuweisen anstatt im XAML-Code:
Code :1 2 3 4 5 6 7
public Window1() { _wetter = new Wetter(); this.Resources.Add("_wetter", _wetter); InitializeComponent(); }
Lösungsansatz 2:
Das Event des Slider erst nach der Initialisierung einhängen:
Code :1 2 3 4 5 6
public Window1() { InitializeComponent(); _wetter = this.FindResource("_wetter") as Wetter; _slider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(_slider_ValueChanged); }
Also man bekommt es schon zum Laufen.
Aber gibts da schönere Lösungen und warum braucht man überhaupt eine Lösung?
Ich hänge doch das Event im XAML-Code ja erst ein nachdem ich das Value-Property geändert habe.
Somit sollte doch beim Initialisieren gar kein Event gefeuert werden!?
-
Meines Wissens doch

Dieses Verhalten gibt es schon seit Vb4 oder früher? Ich hoffe jedenfalls das ich damit richtig liege
.
Das Verhalten kannst im Debugger bei dem kleinen Projekt ja Schritt für Schritt durchgehen und dabei gut ein Käffchen trinken.
Naja auf Schönheit legste ja nicht soviel wert. Hier das wäre mein "schmutziger" schneller Lösungsansatz zu deinem Problem.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
public partial class Window1 : Window { private bool bInit; public Window1() { bInit = false; InitializeComponent(); _wetter = this.FindResource("_wetter") as Wetter; bInit = true } private void _slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { if ((sender as Slider).Value < 0 && binit == true) { //Hier kracht es weil _wetter null ist _wetter.AktuellerStatus = Temperaturstatus.Arschkalt; } } }
Ähnliche Themen
-
[CS3 - AS3] VideoEvent.READY wird gefeuert Sobald das Video bereit ist, aber nur 1x
Von Eisbaer im Forum Flash PlattformAntworten: 0Letzter Beitrag: 09.04.10, 10:49 -
jQuery: out-Event wird gefeuert aber nicht ausgeführt
Von Avorin im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 03.01.10, 22:23 -
mousup-event erzeugt vorher paint-event.Wie abstellen?
Von Cheesygecko im Forum .NET Windows FormsAntworten: 0Letzter Beitrag: 09.01.09, 14:04 -
Sound fängt zu früh an
Von timäää im Forum Flash PlattformAntworten: 6Letzter Beitrag: 03.03.05, 13:13 -
Audio kommt zu früh
Von arminw im Forum Flash PlattformAntworten: 2Letzter Beitrag: 19.08.04, 19:28





Zitieren
Login




