Я пытаюсь заставить обработчик обработчика измененного свойства работать, и я проверил с 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()
никогда не вызывается. Ошибок не возникает.
Что я пропустил? Спасибо за любую помощь.
Я не уверен, но вы, кажется, поднимаете событие * до *, вы добавляете обработчик. Нет никакого способа, чтобы это сработало. – ChrisF
Я только что запустил ваш код, и событие было поднято и вызвало обработчик в «MainViewModel» просто отлично. Как вы называете 'newCharacter'? Нам нужно больше информации для решения этой проблемы. – Gjeltema
newCharacter вызывается нажатием кнопки, вызывается с помощью ICommand. Обработчик добавляется во время инициализации страницы. – Sauce