답변은 질문과 같이 간단하기를 기대하지만 SortedList를 구현하는 클래스에 대한 이벤트를 작성해야합니다.SortedList에서 변경 사항에 대한 이벤트 구현
이 목록이 변경 (추가, 수정, 제거) 될 때마다 이벤트 처리기를 만들 수있는 방법이 있습니까? Add() 메서드 등은 재정의 할 수 없습니다.
감사합니다.
답변은 질문과 같이 간단하기를 기대하지만 SortedList를 구현하는 클래스에 대한 이벤트를 작성해야합니다.SortedList에서 변경 사항에 대한 이벤트 구현
이 목록이 변경 (추가, 수정, 제거) 될 때마다 이벤트 처리기를 만들 수있는 방법이 있습니까? Add() 메서드 등은 재정의 할 수 없습니다.
감사합니다.
아니요. 이런 종류의 동작을 얻는 가장 좋은 방법은 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
}
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
}
아마
더 나은 기존의 인터페이스를 사용하는, 즉 : –
@Reed을 INotifyCollectionChanged 시나리오에 따라 동의했다. 그러나 OP가 수정을위한 이벤트를 원한다면 네 INotifyCollectionChanged는 아마도 ethat에 대한 또 다른 구현이되어야합니다. – JaredPar