我刚刚开始使用WPF,并且正在尝试理解数据绑定。
在我的项目中,我有一个绑定到属性的列表框,它从DependancyProperty获取/设置。
如果我这个属性是ObservableCollection(我将UpdateSourceTrigger设置为PropertyChanged),我的列表框正确表示集合的内容并用它进行更新。 当我完全换掉新的系列时,它不再更新了。
这是为什么?列表框是否永久绑定到该特定对象? Set访问器中的SetValue()不应该使它绑定到新的访问器,并相应地更新吗?
答案 0 :(得分:1)
UpdateSourceTrigger仅影响从控件中的更改更新源的时间。它与你自己对象的作用无关。
我非常不鼓励您覆盖对集合的引用,因为任何需要集合的CollectionChanged
事件的事件处理程序都需要重新连接。
如果您绑定到依赖项属性,我不确定如何处理通知,但是如果您更改了源并且它不是DP,则需要通知绑定。这可以通过实施INotifyPropertyChanged
来完成。
e.g。
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));
}
}
编辑:经过测试,交换了存储在DP中的集合,对我而言,它按预期工作,并且List会更新,显示新集合。