2013-07-21 4 views
1

Я пытаюсь заставить обработчик обработчика измененного свойства работать, и я проверил с dubugger, который вызывается методом OnPropertyChanged, но он не вызывает метод, как я ожидал.Свойство PropertyChanged не обрабатывается должным образом

public class MainViewModel : ObservableObject 
{ 
    public MainViewModel() 
    { 
     _characterSelection = new CharacterSelectionViewModel(); 
     _characterSelection.PropertyChanged += new PropertyChangedEventHandler(characterSelection_PropertyChanged); 
    } 

    private void characterSelection_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     if (e.PropertyName.Equals("Character")) 
     { 
      _character = _characterSelection.Character; 
      _currentView = _newCharacter; 
      OnPropertyChanged("CurrentView"); 
     } 
    } 
} 

[Serializable] 
public class ObservableObject : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string property) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

public class CharacterSelectionViewModel : ObservableObject 
{ 
    private void newCharacter() 
    { 
     CharacterSaver.SaveCharacter(CharacterName, _character); 
     OnPropertyChanged("Character"); 
    } 
} 

Я прошел через это с помощью отладчика, конструктор MainViewModel() вызывается, и добавляет PropertyChangedEventHandler. На данный момент, _characterSelection's PropertyChanged события имеет следующее значение: (На вкладке местных жителей в отладчике)

{Method = {Void characterSelection_PropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}} 

После newCharacter метод в CharacterSelectionViewModel вызывается, она вызывает OnPropertyChanged. На данный момент, _characterSelection's PropertyChanged событие имеет следующее значение:

{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}} 

OnPropertyChanged событие попадает в handler(this, new PropertyChangedEventArgs(property)); линии, но characterSelection_PropertyChanged() никогда не вызывается. Ошибок не возникает.

Что я пропустил? Спасибо за любую помощь.

+0

Я не уверен, но вы, кажется, поднимаете событие * до *, вы добавляете обработчик. Нет никакого способа, чтобы это сработало. – ChrisF

+0

Я только что запустил ваш код, и событие было поднято и вызвало обработчик в «MainViewModel» просто отлично. Как вы называете 'newCharacter'? Нам нужно больше информации для решения этой проблемы. – Gjeltema

+0

newCharacter вызывается нажатием кнопки, вызывается с помощью ICommand. Обработчик добавляется во время инициализации страницы. – Sauce

ответ

2

Возможно, у вас установлена ​​привязка, так что у вас есть отдельный экземпляр CharacterSelectionViewModel вместо экземпляра на MainViewModel. Проверьте свои привязки, чтобы убедиться, что вы должным образом привязаны к MainViewModel, и что вы используете свой экземпляр CharacterSelectionViewModel для вашего привязки ICommand, чтобы убедиться, что событие, на которое вы подписались (в правильном экземпляре), правильно поднято.

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