2016-08-15 70 views
0

我在我的應用程序中使用了MVVM模式。基本上我有一個主視圖和幾個子視圖。事件發生後對象爲空

在主ViewModel中,我有每個子ViewModels的實例。現在在主ViewModel中的一個事件中。

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"); 
      } 
     } 
    } 

它的工作原理,在此之後,程序返回到子視圖C.我想用我剛剛在按鈕事件中的代碼背後的SelectedItem。

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

SelectedItem爲空。不知道爲什麼?

+0

您可能想要調試代碼並在SelectedItems的setter上設置一個斷點。聽起來就像你有多個ViewModel實例 – lokusking

+0

@lokusking,我發現了錯誤併發布了我的解決方案。但我仍然不確定爲什麼.... – Bigeyes

回答

0

OOps。

我添加一個視圖加載事件後,我得到的值。

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; 
    } 
} 

本來我沒有Load事件。我不確定我爲什麼需要它。原來我只是把代碼放在構造函數中,例如:

 InitializeComponent(); 

     this.DataContext = this.ViewModel;