2012-02-10 1 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

아니요, 유형 항목이 아니라는 것을 의미합니다. – 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); 
    } 
} 

관련 문제