我有点不知道为什么这不起作用考虑到我从工作代码中得到它,只是添加了一个新级别的代码,但这就是我所拥有的。基本上,当我将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.
}
}
答案 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;
}