2013-07-21 72 views
1

我試圖讓我的屬性更改事件處理程序工作,並且我已經檢查了與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)}} 

一旦在CharacterSelectionViewModelnewCharacter方法被調用,它調用OnPropertyChanged。 此時,_characterSelection's PropertyChanged事件具有此值:

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

OnPropertyChanged事件獲取到handler(this, new PropertyChangedEventArgs(property));線,但characterSelection_PropertyChanged()永遠不會調用。沒有錯誤被拋出。

我錯過了什麼?謝謝你的幫助。

+0

我不確定,但是在添加處理程序之前,您似乎正在提高事件*。這是行不通的。 – ChrisF

+0

我剛剛運行了你的代碼,並且事件被引發並在'MainViewModel'中調用了處理程序就好了。你怎麼調用'newCharacter'?我們需要更多信息來解決這個問題。 – Gjeltema

+0

newCharacter通過按鈕按下來調用,並用ICommand調用。該處理程序在頁面初始化期間添加。 – Sauce

回答

2

您可能已設置綁定,以便您有一個單獨的實例CharacterSelectionViewModel而不是MainViewModel上的實例。檢查綁定以確保您正確綁定到MainViewModel,並且您正在利用其CharacterSelectionViewModel的實例來綁定您的ICommand綁定,以確保您正在訂閱的事件(在正確的實例上)正確引發。