2016-08-15 3 views
0

Я использую шаблон MVVM в своем приложении. В основном у меня есть основной вид и несколько дочерних представлений.Объект null после события

В главной 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 есть null. Не знаете почему?

+0

Возможно, вам захочется отладить ваш код и установить точку останова на сеттере вашего SelectedItems. Похоже, у вас есть несколько экземпляров вашего ViewModel – lokusking

+0

@lokusking, я нашел ошибку и разместил свое решение. Но я все еще не уверен, почему .... – Bigeyes

ответ

0

OOps.

После того как я добавлю событие загрузки View, я получаю значение.

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; 
Смежные вопросы