속성 변경 이벤트 처리기를 가져 오려고합니다. 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
이벤트는이 가치가있다. 오류가 발생하지 않습니다.
무엇을 놓쳤습니까? 어떤 도움을 주셔서 감사합니다.
확실치 않지만 핸들러를 추가하기 전에 이벤트를 발생시키는 것으로 보입니다. 일할 방법이 없습니다. – ChrisF
방금 코드를 실행했는데 이벤트가 발생하여'MainViewModel'의 핸들러가 제대로 호출되었습니다. 'newCharacter'를 어떻게 부르니? 이를 해결하기 위해서는 더 많은 정보가 필요합니다. – Gjeltema
newCharacter는 버튼 누름에 의해 호출되며 ICommand와 함께 호출됩니다. 핸들러는 페이지 초기화 동안 추가됩니다. – Sauce