2015-06-01 6 views
2

Я не мог настроить точку останова в свойстве SET модели View Model, поэтому значение по умолчанию не изменилось. (Get - это все правильно и инициализировать мой Text Box с допустимым значением по умолчанию.)Когда выполняется RaisePropertyChanged?

У меня есть model.cs , где поле общественной строки определенного

model.cs 
{ 
.. 
public textDefValue = "aaa"; 
} 

и здесь является ViewModel

{ 
.. 
Model model = new Model(); 
.... 
public string TextField 
     { 
      get { return model.textDefValue; } 
      set 
      { 
       //break point here 
       model.textDefValue = value; 
       RaisePropertyChanged(TextField); 
      } 
     } 
.... 
    protected void RaisePropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
} 

И XAML:

<TextBox x:Name="myBox" Text="{Binding ViewModel.TextField, Mode=TwoWay}"> 

Я полагаю, что, когда я напечатаю некоторые вещь в этом текстовом поле, SET будет работать, и я буду нацелен на точку останова, но я не смог бы пробить этот разрыв в SET. Где ошибка?

+0

, где определена модель ViewModel, в основном она перейдет через ресурс, который затем будет называться «Text =» {Binding TextField, Mode = TwoWay, Source = {StaticResource KeyOfViewModelInResources}} " – Icepickle

+0

Трудно перевести все это, но проблема, вероятно, имеет какое-то отношение к вашему 'Binding'. Проверьте ** окно вывода ** для подсказок. Кроме того, вам не нужно создавать свойство в вашей модели просмотра только для того, чтобы выставить свойство вашей модели. Вместо этого вы можете просто привязать свойство модели. –

ответ

6

Нет ошибок, просто недоразумение.

По умолчанию привязка для элемента управления .Text обновляется только после выхода из окна (т. Е. Перемещение фокуса на другой элемент управления). Вам нужно щелкнуть или «Tab away» для обновления значения и точки останова.

Вы можете изменить это поведение путем обновления связывания следующим образом:

Text="{Binding ViewModel.TextField, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

Это приведет к связыванию обновлять каждый раз, когда изменяется значение текста - то есть, за нажатием клавиши в текстовом поле.

+0

Прошу прощения за еще один вопрос здесь. Кажется, что я что-то сработал ((Нет. Get тоже не работает). Я добавил строку, которую вы предложили, но .. Я инициализировал экземпляр модели в конструкторе ViewModel, но в XAML У меня есть другой datacontext, а затем ViewModel - это еще один класс – curiousity

+1

@curiousity, который является абсолютно несвязанной проблемой, и вам нужно будет задать новый вопрос с соответствующим кодом, чтобы воссоздать проблему. –

+0

Извините, я нашел ошибку - все работаю сейчас – curiousity

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