为什么在更改ObservableCollection但不替换它时会发生UpdateSourceTrigger?

时间:2011-02-05 14:44:16

标签: wpf binding dependency-properties observablecollection

我刚刚开始使用WPF,并且正在尝试理解数据绑定。

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

如果我这个属性是ObservableCollection(我将UpdateSourceTrigger设置为PropertyChanged),我的列表框正确表示集合的内容并用它进行更新。 当我完全换掉新的系列时,它不再更新了。

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

1 个答案:

答案 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会更新,显示新集合。