2012-02-10 4 views
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はItem型ではなくタイプコレクションです。

+0

私は値ではなく、値であると仮定します。値がタイプRangeObservableCollection ではないと言っていますか?その場合、_allItems = valueは失敗するはずです。 – Paparazzi

+0

いいえ、タイプItemではないことを意味しました – Aaron

答えて

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

関連する問題