C# 即使实现了INotifyProperty接口,ObservableCollection也不会刷新

C# 即使实现了INotifyProperty接口,ObservableCollection也不会刷新,c#,wpf,data-binding,C#,Wpf,Data Binding,我有一个绑定到列表框的可观察集合 public ObservableCollection<InsertionVM> Insertions { get { return _insertions; } set { _insertions = value; base.OnPropertyChanged("ChromosomeList"); } } 为什么即使我为每个属性实现INotifyPro

我有一个绑定到列表框的
可观察集合

public ObservableCollection<InsertionVM> Insertions
{
    get
    {
        return _insertions;
    }
    set
    {
        _insertions = value;
        base.OnPropertyChanged("ChromosomeList");
    }
}
为什么即使我为每个属性实现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
}
建造商:
请确保将[Insertions]放在绑定路径中,它就会工作

[插入]将仅在您更改引用时更新,如

Insertions = new ObservableCollection<InsertionVM>( Items);
Insertions=新的可观察集合(项目);
要使代码更有效,请添加检查集合中的值是否更改,如

public ObservableCollection<InsertionVM> Insertions
    {
        get
        {
            return _insertions;
        }
        set
        {
       if(_insertions != value)
           {
               _insertions = value;
               base.OnPropertyChanged("Insertions");
           }
        }
    }
公共可观测集合插入
{
得到
{
返回_插入;
}
设置
{
if(_insertions!=值)
{
_插入=值;
基础.OnPropertyChanged(“插入”);
}
}
}

始终记住以下几点:

ObservableCollection
仅在项目数量发生变化时发出通知(当添加一个项目和删除一个项目时,它可能保持不变,但您得到了要点)

如果
ObservableCollection
中的项目发生更改,则collection不负责传播更改通知。

这是您的代码:(请参阅我的评论)

public observetecollection Insertions//propertyName==Insertions
{
得到
{
返回_插入;
}
设置
{
_插入=值;
base.OnPropertyChanged(“染色体列表”);//什么是染色体列表??
}
}

你现在能看到问题了吗?将
ChromosomeList
更改为
Insertions
。希望至少能解决一些问题

请发布您的xaml绑定,并添加您的集合更新不正确的操作。Jack提供的链接中的
ObservableCollection
的自定义实现将修复此行为。未注意到。这就是问题所在——为像我这样的厚脸皮的人解释清楚。显然,您是说传递给OnPropertyChanged的字符串很重要。它的价值到底应该是什么?集合实例的名称?@PeterWone:否。属性的名称,而不是实例的名称。在本例中,实例是
\u insertions
,但属性是
insertions
Insertions = new ObservableCollection<InsertionVM>( Items);
public ObservableCollection<InsertionVM> Insertions
    {
        get
        {
            return _insertions;
        }
        set
        {
       if(_insertions != value)
           {
               _insertions = value;
               base.OnPropertyChanged("Insertions");
           }
        }
    }
public ObservableCollection<InsertionVM> Insertions // propertyName == Insertions
{
    get
    {
        return _insertions;
    }
    set
    {
        _insertions = value;
        base.OnPropertyChanged("ChromosomeList"); // What is ChromosomeList??
    }
}