PropertyChanged无法正常工作

时间:2010-06-12 16:24:17

标签: silverlight mvvm

我有一个Silverlight应用程序,我在其中实现了MVVM模式。 在我的应用程序中有一个子窗口,我有ComboBox。我将我的组合框的ItemsSource和SelectedItem绑定到属性(typeof ObservableCollection)和MyType的属性。 MyType是从INotifyPropertyChanged派生的“MODEL”。当我的窗口加载时,我将值设置为此属性。但我的组合框不显示所选项目。 我发现当我设置绑定到所选项的属性(在ViewModel中)时,PropertyChanged事件为null。 谁能帮我。感谢。

2 个答案:

答案 0 :(得分:0)

从您描述它的方式来看,唯一被绑定的是ViewModel,但实现INotifyPropertyChanged的唯一方法是MyType。实际上没有什么能够绑定到我的类型的实例来监听它的PropertyChanged事件,这就是它为null的原因。

听起来你没有在ViewModel上实现INotifyPropertyChanged。

答案 1 :(得分: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;

}

当然,您可以将事件和方法放在基类中继承,这样多个模型就可以利用它。