Почему UpdateSourceTrigger возникает при изменении ObservableCollection, но не при его замене? - PullRequest
0 голосов
/ 05 февраля 2011

Я только начинаю с WPF и пытаюсь понять привязку данных.

В моем проекте у меня есть список, связанный со свойством, которое получает / устанавливает из DependancyProperty.

Если это свойство является ObservableCollection (и я установил UpdateSourceTrigger в PropertyChanged), мой список правильно отображает содержимое коллекции и обновляет ее.Когда я полностью заменяю коллекцию новой, она больше не обновляется.

Почему это так?Становится ли список постоянно связанным с этим конкретным объектом?Разве SetValue () в аксессоре Set не должен связывать его с новым и обновлять соответственно?

1 Ответ

1 голос
/ 05 февраля 2011

UpdateSourceTrigger действует только при обновлении источника в результате изменений в элементе управления.Это не имеет ничего общего с тем, что вы делаете с самим объектом.

Я настоятельно не рекомендую перезаписывать ссылку на коллекцию, потому что любые обработчики событий, которые также нуждаются в событии CollectionChanged коллекции, будут нуждатьсябыть повторно подключенным.

Я не уверен, как обрабатываются уведомления, если вы привязываетесь к свойствам зависимостей, но если вы изменили свой источник, и это не DP, вам нужно уведомить о привязке.Это можно сделать, внедрив 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));
        }
    }

Редактировать: Протестированный обмен коллекцией, хранящейся в DP, для меня это работает какожидается, и список обновляется, отображая новую коллекцию.

...