Created ObservableList

Class used for notifying when an item is added/removed from a list
without raising events for things like index changes.
This commit is contained in:
Robin 2015-09-18 12:38:18 +01:00
parent 8408c47a3f
commit 217058af72
4 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace DarkUI
{
public class ObservableList<T> : List<T>, IDisposable
{
#region Field Region
private bool _disposed;
#endregion
#region Event Region
public event EventHandler<ObservableListModified<T>> ItemsAdded;
public event EventHandler<ObservableListModified<T>> 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<T>(new List<T> { item }));
}
public new void AddRange(IEnumerable<T> collection)
{
var list = collection.ToList();
base.AddRange(list);
if (ItemsAdded != null)
ItemsAdded(this, new ObservableListModified<T>(list));
}
public new void Remove(T item)
{
base.Remove(item);
if (ItemsRemoved != null)
ItemsRemoved(this, new ObservableListModified<T>(new List<T> { item }));
}
#endregion
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace DarkUI
{
public class ObservableListModified<T> : EventArgs
{
public IEnumerable<T> Items { get; private set; }
public ObservableListModified(IEnumerable<T> items)
{
Items = items;
}
}
}

View File

@ -38,6 +38,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Collections\ObservableList.cs" />
<Compile Include="Collections\ObservableListModified.cs" />
<Compile Include="Config\Colors.cs" />
<Compile Include="Config\Consts.cs" />
<Compile Include="Config\Enums.cs" />