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