using System; using System.Collections.Generic; using System.Linq; namespace DarkUI.Collections { public class ObservableList : List, IDisposable { #region Field Region private bool _disposed; #endregion #region Event Region public event EventHandler> ItemsAdded; public event EventHandler> ItemsRemoved; #endregion #region Destructor Region ~ObservableList() { Dispose(false); } #endregion #region Dispose Region public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_disposed) { if (ItemsAdded != null) ItemsAdded = null; if (ItemsRemoved != null) ItemsRemoved = null; _disposed = true; } } #endregion #region Method Region public new void Add(T item) { base.Add(item); if (ItemsAdded != null) ItemsAdded(this, new ObservableListModified(new List { item })); } public new void AddRange(IEnumerable collection) { var list = collection.ToList(); base.AddRange(list); if (ItemsAdded != null) ItemsAdded(this, new ObservableListModified(list)); } public new void Remove(T item) { base.Remove(item); if (ItemsRemoved != null) ItemsRemoved(this, new ObservableListModified(new List { item })); } public new void Clear() { ObservableListModified removed = new ObservableListModified(this.ToList()); base.Clear(); if (removed.Items.Count() > 0 && ItemsRemoved != null) ItemsRemoved(this, removed); } #endregion } }