2016-08-15 2 views
0

Ich verwende MVVM-Muster in meiner Anwendung. Im Grunde habe ich eine Hauptansicht und mehrere Kinderansichten.Das Objekt ist Null nach dem Ereignis

Im Haupt-ViewModel habe ich die Instanzen jedes untergeordneten ViewModels. Jetzt in einem Event im Haupt-ViewModel.

Ich habe

private void Child_B_Grid_SelectedRowChanged(object sender, EventArgs e) 
{ 
    Child_C_ViewModel.SelectedItem = Child_B_ViewModel.SelectedItem; 
} 

public object SelectedItem 
    { 
     get 
     { 
      return this.selectedItem; 
     } 
     set 
     { 
      if (value != this.selectedItem) 
      { 
       this.selectedItem = value; 
       this.OnPropertyChanged("SelectedItem"); 
      } 
     } 
    } 

Es funktioniert, danach das Programm zum Kinder anzeigen C. kehrt ich die SelectedItem verwenden möchte ich nur in einer Schaltfläche Event, hinter im Code.

private void btn_Click(object sender, RoutedEventArgs e) 
    { 
     this.ViewModel.Save(); 
    } 

Aber SelectedItem ist null. Nicht sicher warum?

+0

Sie möchten möglicherweise Ihren Code debuggen und einen Haltepunkt auf SelectedItems Setter setzen. Klingt so, als hätten Sie mehrere Instanzen Ihres ViewModels – lokusking

+0

@lokusking. Ich habe den Fehler gefunden und meine Lösung veröffentlicht. Aber ich bin mir immer noch nicht sicher warum ... – Bigeyes

Antwort

0

OOps.

Nachdem ich ein Ereignis zum Laden der Ansicht hinzugefügt habe, erhalte ich den Wert.

private void View_Loaded(object sender, System.Windows.RoutedEventArgs e) 
{ 
    if (this.DataContext is ViewModel) 
    { 
     this.ViewModel = this.DataContext as ViewModel; 
    } 
    else 
    { 
     this.DataContext = this.ViewModel; 
    } 
} 

Ursprünglich hatte ich das Load-Ereignis nicht. Ich bin mir nicht ganz sicher, warum ich es brauche. Original Ich habe nur den Code in den Konstruktor wie:

 InitializeComponent(); 

     this.DataContext = this.ViewModel; 
Verwandte Themen