2010-06-12 78 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; 

} 

当然你也可以把事件和方法在基类从这么多车型继承可以利用它的优势。