2013-07-21 3 views
1

속성 변경 이벤트 처리기를 가져 오려고합니다. 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 추가됩니다. (지역 주민 탭에서 디버거로) CharacterSelectionViewModel에서 newCharacter 메소드가 호출되는 일단

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

, 그것은 OnPropertyChanged를 호출이 시점에서 는 _characterSelection's PropertyChanged 이벤트는이 가치가있다.

{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}} 
OnPropertyChanged 이벤트가 handler(this, new PropertyChangedEventArgs(property)); 라인에 도달

하지만 characterSelection_PropertyChanged()가 호출되지 않습니다 :이 시점에서 는 _characterSelection's PropertyChanged 이벤트는이 가치가있다. 오류가 발생하지 않습니다.

무엇을 놓쳤습니까? 어떤 도움을 주셔서 감사합니다.

+0

확실치 않지만 핸들러를 추가하기 전에 이벤트를 발생시키는 것으로 보입니다. 일할 방법이 없습니다. – ChrisF

+0

방금 ​​코드를 실행했는데 이벤트가 발생하여'MainViewModel'의 핸들러가 제대로 호출되었습니다. 'newCharacter'를 어떻게 부르니? 이를 해결하기 위해서는 더 많은 정보가 필요합니다. – Gjeltema

+0

newCharacter는 버튼 누름에 의해 호출되며 ICommand와 함께 호출됩니다. 핸들러는 페이지 초기화 동안 추가됩니다. – Sauce

답변

2

MainViewModel 대신 인스턴스가 아닌 CharacterSelectionViewModel이라는 별도 인스턴스가있는 바인딩이있을 수 있습니다. 바인딩을 확인하여 올바르게 MainViewModel에 바인딩되어 있고 ICommand 바인딩에 CharacterSelectionViewModel 인스턴스를 사용하고있어 (올바른 인스턴스에서) 구독중인 이벤트가 올바르게 제기되었는지 확인해야합니다.

관련 문제