diff --git a/DarkUI/Collections/ObservableList.cs b/DarkUI/Collections/ObservableList.cs new file mode 100644 index 0000000..6d6f307 --- /dev/null +++ b/DarkUI/Collections/ObservableList.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace DarkUI +{ + 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 (disposing) + { + // Release managed resources + } + + // Release unmanaged resources. + // Set large fields to null. + if (ItemsAdded != null) + ItemsAdded = null; + + if (ItemsRemoved != null) + ItemsRemoved = null; + + // Set disposed flag + _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 })); + } + + #endregion + } +} diff --git a/DarkUI/Collections/ObservableListModified.cs b/DarkUI/Collections/ObservableListModified.cs new file mode 100644 index 0000000..f5d4d70 --- /dev/null +++ b/DarkUI/Collections/ObservableListModified.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace DarkUI +{ + public class ObservableListModified : EventArgs + { + public IEnumerable Items { get; private set; } + + public ObservableListModified(IEnumerable items) + { + Items = items; + } + } +} diff --git a/DarkUI/Controls/Classes/DarkListItem.cs b/DarkUI/Controls/Items/DarkListItem.cs similarity index 100% rename from DarkUI/Controls/Classes/DarkListItem.cs rename to DarkUI/Controls/Items/DarkListItem.cs diff --git a/DarkUI/DarkUI.csproj b/DarkUI/DarkUI.csproj index 246636e..f4bee5f 100644 --- a/DarkUI/DarkUI.csproj +++ b/DarkUI/DarkUI.csproj @@ -38,6 +38,8 @@ + +