当集合发生变化时触发一个方法

3

我有一个使用这个集合的绑定:

private RangeObservableCollection<Item> _allItems;

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

RangeObservarbleCollection是一个集合,当调用AddRange方法时,只会抛出一条通知表明该集合已更改。

我有另一个集合,其项依赖于AllItems集合的项。

private RangeObservableCollection<Item> _commonItems;

我希望每当AllItems集合发生变化时,能够触发一个方法来执行一些计算并更改CommonItems集合中的项目。我尝试在AllItems集合的set方法内部触发它,但是该值的类型是集合类型而不是项类型。

我认为您指的是value,而不是Value。您是说该值不属于RangeObservableCollection<Item>类型?如果是这样,那么_allItems = value应该会失败。 - paparazzo
不,我的意思是它不是Item类型。 - Mité
2个回答

5
您可以像这样将事件附加到集合上:
_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

在设置属性时,您需要附加到AllItems集合上的事件,并在清除它时分离。然后从AllItems事件的处理程序中触发您的事件。

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);
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接