我試圖讓我的屬性更改事件處理程序工作,並且我已經檢查了與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)}}
一旦在CharacterSelectionViewModel
newCharacter
方法被調用,它調用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