2010-06-12 74 views
1

我有一個Silverlight應用程序,其中實現了MVVM模式。 在我的應用程序中有一個我有ComboBox的子窗口。我將我的組合框的ItemsSource和SelectedItem綁定到一個屬性(typeof ObservableCollection)和MyType屬性中。 MyType是從INotifyPropertyChanged派生的「MODEL」。當我的窗口被加載時,我將值設置爲這個屬性。但我的組合框不顯示選定的項目。 我發現當我設置綁定到選定項目的屬性(在ViewModel中)時,PropertyChanged事件爲null。 任何人都可以幫助我。謝謝。PropertyChanged無法正常工作

+0

描述您的代碼並不像實際向我們展示您的代碼那樣有幫助。 – AnthonyWJones 2010-06-12 20:38:36

回答

0

從你描述過的方式來看,綁定到的唯一東西就是ViewModel,但實現INotifyPropertyChanged的唯一東西就是MyType。實際上沒有任何綁定到我的類型的實例來監聽它的PropertyChanged事件,這是它爲null的原因。

這聽起來像你沒有在你的ViewModel上實現INotifyPropertyChanged。

0

PropertyChanged工作正常,所以它必須在您的實施中。簡單地實現INotifyProperty變得不夠好,你必須明確地調用事件。

例如,這是不行的:

public class Model : INotifyPropertyChanged 
{ 
    public string Title { get; set; } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

爲了它的工作,你必須提高更改的屬性。最簡單的方法是封裝邏輯的方法,像這樣:

public class Model : INotifyPropertyChanged 
{ 
    private string _title; 

    public string Title 
    { 
     get { return _title; } 
     set 
     { 
     _title = value; 
     RaisePropertyChanged("Title"); 
     } 
    } 

    protected void RaisePropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

} 

當然你也可以把事件和方法在基類從這麼多車型繼承可以利用它的優勢。