我正在尝试让我的属性更改事件处理程序工作,并且我已经使用dubugger检查了正在调用的OnPropertyChanged方法,但是它没有像我期望的那样调用该方法。
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
事件具有以下值:(来自调试器中的locals选项卡)
{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 :(得分:2)
您可以设置绑定,以便在CharacterSelectionViewModel
上使用单独的MainViewModel
实例,而不是MainViewModel
上的实例。检查您的绑定,以确保您已正确绑定到CharacterSelectionViewModel
,并且您正在使用ICommand
的{{1}}实例来确保您所遇到的事件正确提出订阅(在正确的实例上)。