我有ObservableCollection
绑定到列表框
public ObservableCollection<InsertionVM> Insertions
{
get
{
return _insertions;
}
set
{
_insertions = value;
base.OnPropertyChanged("ChromosomeList");
}
}
其成员InsertionVM
实现了INotifyPropertyChanged。它有一个将被更新的属性。
public bool IsChecked
{
get
{
return _isChecked;
}
set
{
_isChecked = value;
base.OnPropertyChanged("IsChecked");
}
}
为什么即使我为每个属性实现了INotifyPropertyChanged接口,ObservableCollection也不会刷新?
我尝试了下面给出的链接,但只有删除/添加对象时才会更新“更敏感的集合”。
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach (InsertionVM item in e.NewItems)
{
//Removed items
item.PropertyChanged -= EntityViewModelPropertyChanged;
}
}
else if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (InsertionVM item in e.NewItems)
{
//Added items
item.PropertyChanged += EntityViewModelPropertyChanged;
}
}
public void EntityViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
//Debugger does not reach here
}
public ChromosomeVM(Chromosome _chr, string insertionFilePath)
{
Chr = _chr;
_insertions.CollectionChanged += ContentCollectionChanged;
}
答案 0 :(得分:2)
始终记住以下内容:
ObservableCollection<T>
仅在number of items
(可能保持相同,添加一个项目,删除一个项目,但您得到了重点)时通知{。<}>
如果ObservableCollection<T>
中的项目发生更改,则集合不负责传播更改通知。
答案 1 :(得分:2)
这是你的代码:(请参见评论,由我制作)
public ObservableCollection<InsertionVM> Insertions // propertyName == Insertions
{
get
{
return _insertions;
}
set
{
_insertions = value;
base.OnPropertyChanged("ChromosomeList"); // What is ChromosomeList??
}
}
你现在能看到问题吗?将ChromosomeList
更改为Insertions
。希望至少有一些问题能得到解决!
答案 2 :(得分:0)
请参阅ObservableCollection not noticing when Item in it changes (even with INotifyPropertyChanged) - 基本上您还需要挂钩CollectionChanged事件。
答案 3 :(得分:0)
务必将[插入]放在绑定的路径中,它将起作用
[插入]仅在您更改参考时才会更新。
Insertions = new ObservableCollection<InsertionVM>( Items);
为了使您的代码更有效,请检查集合中的值是否发生变化,如
public ObservableCollection<InsertionVM> Insertions
{
get
{
return _insertions;
}
set
{
if(_insertions != value)
{
_insertions = value;
base.OnPropertyChanged("Insertions");
}
}
}