2014-01-31 3 views
0

Например, Если кнопка нажата:Вызов ViewModel от другого во время выполнения

// Call second VM from first VM and process values 
new SecondViewModel().Values = new string[] { "value1", "value2" }; 

Второй ViewModel. Однако это никогда не срабатывает.

public string[] Values; 

public DatagridViewModel() 
{ 
    ProcessStrings(Values); 
} 

следующие работы:

public string[] Values = new string[] { "value1", "value2" }; 

public DatagridViewModel() 
{ 
    ProcessStrings(Values); 
} 

Мне кажется, что все они работают хорошо только в первый раз, когда ViewModel компилируется. Но в любой другой момент, когда я пытаюсь назвать его во время выполнения, он никогда не работает. Просто интересно, что может быть неправильно.

+0

Должность полный классы если возможно пожалуйста. – Bogdan

+0

Непонятно, что вы спрашиваете. – meilke

+1

Я подозреваю, что вы должны получить ссылку на фактический 'SecondViewModel' вместо создания нового. –

ответ

1

Это потому, что свойство Values еще не установлено так, как вы его называете; конструктор должен завершиться до вызова сеттера, а Values еще не установлен в конструкторе. Вы должны были бы передать значения в конструктор или набор Values позже:

var vm = new SecondViewModel(); 
vm.Values = new string[] { "value1", "value2" }; 
vm.ProcessStrings(); 

Еще лучше, если использовать свойство:

private string[] values; 
public string[] Values 
{ 
    get { return values; } 
    set 
    { 
     if (this.values == value) 
      return; 

     this.values = value; 
     this.ProcessStrings(); 
    } 
} 
+0

Спасибо, но это все еще не работает для меня. У меня есть DataGrid, где я загружаю и отображаю все обработанные значения. DataGrid привязан к свойству List, основанному на этих значениях. Однако, несмотря на то, что этот список изменяется во время выполнения с использованием описанной вами технологии, DataGrid всегда пуст и отображает только что-то, если я передал значения через конструктор при первом компиляции приложения. Возможно, это связано с техникой, которую я использовал для переключения видов, найденных здесь: http://stackoverflow.com/questions/21468544/how-to-change-view-when-openfiledialog-is-closed – usefulBee

0

При создании виртуальной машины в обработчик событий кнопки, первое это вызов конструктор и после них присваивается массив Values. Поэтому, если вы вызываете конструктор ProcessStrings(Values), параметр null.

Смежные вопросы