Wpf 为什么在更改ObservableCollection但不替换它时会出现UpdateSourceTrigger?

Wpf 为什么在更改ObservableCollection但不替换它时会出现UpdateSourceTrigger?,wpf,binding,dependency-properties,observablecollection,Wpf,Binding,Dependency Properties,Observablecollection,我只是从WPF开始,并试图理解数据绑定 在我的项目中,我有一个绑定到属性的列表框,该属性从DependencyProperty获取/设置 如果我将此属性设置为ObservableCollection(并且我将UpdateSourceTrigger设置为PropertyChanged),则我的列表框将正确表示集合的内容并使用它进行更新。 但是,当我将整个收藏换成新的时,它不再更新 为什么会这样?列表框是否永久绑定到该特定对象?Set访问器中的SetValue()是否应该导致它绑定到新的,并相应地更

我只是从WPF开始,并试图理解数据绑定

在我的项目中,我有一个绑定到属性的列表框,该属性从DependencyProperty获取/设置

如果我将此属性设置为ObservableCollection(并且我将UpdateSourceTrigger设置为PropertyChanged),则我的列表框将正确表示集合的内容并使用它进行更新。 但是,当我将整个收藏换成新的时,它不再更新


为什么会这样?列表框是否永久绑定到该特定对象?Set访问器中的SetValue()是否应该导致它绑定到新的,并相应地更新?

UpdateSourceTrigger仅在从控件中的更改更新源时生效。它与您单独对对象所做的操作无关

我强烈建议您不要覆盖对集合的引用,因为还需要集合的
CollectionChanged
事件的任何事件处理程序都需要重新连接

如果您绑定到依赖属性,我不确定如何处理通知,但是如果您更改了源并且它不是DP,则需要通知绑定。这可以通过实现
INotifyPropertyChanged
来实现

e、 g

私有ObservableCollection数据=新ObservableCollection();
公共可观测收集数据
{
获取{返回数据;}
设置
{
数据=价值;
NotifyPropertyChanged(“数据”);
}
}
公共事件属性更改事件处理程序属性更改;
私有void NotifyPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}

编辑:已测试交换存储在DP中的集合,对我来说,它按预期工作,列表将更新,显示新集合。

感谢您的解释。我的第一次尝试是使用值类型,因此我对触发器和SetValue()的来源有点困惑。也谢谢你解释INotifyPropertyChanged,我知道我需要“像那样的东西”,但到目前为止,这东西是什么一直在逃避我!这是人们不知道的一件很平常的事。谢天谢地,每个人只需要学一次:)
    private ObservableCollection<Stuff> data = new ObservableCollection<Stuff>();
    public ObservableCollection<Stuff> Data
    {
        get { return data ; }
        set
        {
            data = value;
            NotifyPropertyChanged("Data");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

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