Silverlight绑定 - 添加项目但未获得更新时绑定

时间:2010-04-01 15:41:59

标签: c# silverlight

我有点不知道为什么这不起作用考虑到我从工作代码中得到它,只是添加了一个新级别的代码,但这就是我所拥有的。基本上,当我将ViewModel绑定到列表时,绑定会在将Items添加到集合时获取。但是,如果对绑定的项进行更新,则不会更新。基本上,我有一个ObservableCollection,它包含一个带字符串值的自定义类。当该字符串值更新时,我需要它来更新List。

现在,当我调试时,列表项确实正确更新,但UI不反映更改。如果我将绑定项设置为成员变量并将其清空,则将其重置为正确的集合,它将起作用,但不是所需的行为。

这是代码的模型,希望有人可以告诉我哪里错了。另外,我尝试在下面的代码中的每个级别实现INofityPropertyChanged。

public class Class1
{
     public string ItemName;
}

public class Class2
{
     private Class2 _items;

     private Class2() //Singleton
     {
          _items = new ObservableCollection<Class1>();
     }

     public ObservableCollection<Class1> Items
     {
          get { return _items; }
          internal set 
          { 
               _items = value;
          }
     }
}

public class Class3
{

     private Class2 _Class2Instnace;

     private Class3()
     {
          _Class2Instnace = Class2.Instance;
     }

     public ObservableCollection<Class1> Items2
     {
          get {return _Class2Instnace.Items; }
     }
}

public class MyViewModel : INofityPropertyChanged
{
     private Class3 _myClass3;

     private MyViewModel()
     {
          _myClass3 = new Class3();
     }

     private BindingItems
     {
          get { return _myClass3.Items2; }  // Binds when adding items but not when a Class1.ItemName gets updated.
     }
}

1 个答案:

答案 0 :(得分:2)

您的问题的答案是Class1需要实施INotifyPropertyChanged

public class Class1 : INotifyPropertyChanged
{
    private string _ItemName;
    public string ItemName
    {
       get { return _ItemName; }
       set
       {
         _ItemName = value;
         NotifyPropertyChanged("ItemName");
       }
    }

    private void NotifyPropertyChanged(string name)
    {
      if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs(name));
    }

    public event PropertyChangedEventHandler PropertyChanged;

}