Запустите метод при изменении коллекции - PullRequest
3 голосов
/ 10 февраля 2012

У меня есть привязка, которая использует эту коллекцию:

private RangeObservableCollection<Item> _allItems;

public RangeObservableCollection<Item> AllItems
            { 
                get { return _allItems; }
                set { _allItems = value; }
            }

RangeObservarbleCollection - это коллекция, которая выдает только одно уведомление об изменении коллекции при вызове метода AddRange.

У меня есть другая коллекция, предметы которой зависят от предметов коллекции AllItems.

private RangeObservableCollection<Item> _commonItems;

Я хочу, чтобы при изменении коллекции AllItems вызывался метод, выполняющий некоторые вычисления и изменяющий элементы в коллекции CommonItems. Я попытался запустить его внутри метода set для коллекции AllItems, но значение Value относится к типу collection, а не к типу Item.

Ответы [ 2 ]

5 голосов
/ 10 февраля 2012

Вы можете прикрепить событие к коллекции следующим образом:

_allItems.CollectionChanged += new NotifyCollectionChangedEventHandler(_allItems_CollectionChanged)

protected void _allItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
     switch (e.Action)
         {
             case NotifyCollectionChangedAction.Add:
                //do stuff;
                 break;
             case NotifyCollectionChangedAction.Remove:
                //do stuff
                 break;
         }

}
0 голосов
/ 10 февраля 2012

При установке свойства вы захотите прикрепить его к событию в коллекции AllItems и отсоединить при его очистке.Затем запустите ваше событие из обработчика для события AllItems.

</p> <pre><code>public RangeObservableCollection<Item> AllItems { get { return _allItems; } set { if (_allItems != null) { _allItems.CollectionChanged -= AllItems_CollectionChanged; } _allItems = value; } if (_allItems != null) { _allItems.CollectionChanged +-= AllItems_CollectionChanged; } } private void AllItems_CollectionChanged(object sender, CollectionChangedEventArgs e) { OnCollectionChanged(e); } private void OnCollectionChanged(CollectionChangedEventArgs args) { EventHandler<CollectionChangedEventArgs> temp = CollectionChanged; if (temp != null) { temp.Invoke(this, args); } }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...