2009-10-05 2 views
1

답변은 질문과 같이 간단하기를 기대하지만 SortedList를 구현하는 클래스에 대한 이벤트를 작성해야합니다.SortedList에서 변경 사항에 대한 이벤트 구현

이 목록이 변경 (추가, 수정, 제거) 될 때마다 이벤트 처리기를 만들 수있는 방법이 있습니까? Add() 메서드 등은 재정의 할 수 없습니다.

감사합니다.

답변

2

아니요. 이런 종류의 동작을 얻는 가장 좋은 방법은 SortedList<T>을 래핑하고 비슷한 메소드 세트를 공개하며 관심있는 메소드에 해당하는 이벤트가있는 새 클래스를 작성하는 것입니다.

public class MySortedList<T> : IList<T> { 
    private SortedList<T> _list = new SortedList<T>(); 
    public event EventHandler Added; 
    public void Add(T value) { 
    _list.Add(value); 
    if (null != Added) { 
     Added(this, EventArgs.Empty); 
    } 
    } 
    // IList<T> implementation omitted 
} 
+0

더 나은 기존의 인터페이스를 사용하는, 즉 : –

+0

@Reed을 INotifyCollectionChanged 시나리오에 따라 동의했다. 그러나 OP가 수정을위한 이벤트를 원한다면 네 INotifyCollectionChanged는 아마도 ethat에 대한 또 다른 구현이되어야합니다. – JaredPar

1

SortedList에서 상속하는 대신 캡슐화해야합니다. 클래스는 INotifyCollectionChanged뿐만 아니라, 같은 인터페이스를 구현합니다

public class MySortedList<TKey, TValue> : IDictionary<TKey, TValue>, 
    ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
    IDictionary, ICollection, IEnumerable, INotifyCollectionChanged 
{ 
    private SortedList<TKey, TValue> internalList = new SortedList<TKey, TValue>(); 

    public void Add(TKey key, TValue value) 
    { 
     this.internalList.Add(key,value); 
     // Do your change tracking 
    } 
    // ... implement other methods, just passing to internalList, plus adding your logic 
} 
아마
관련 문제