添加项目文件。
This commit is contained in:
118
src/BRS.Common.Model/Helper/ListHelper.cs
Normal file
118
src/BRS.Common.Model/Helper/ListHelper.cs
Normal file
@ -0,0 +1,118 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
|
||||
namespace BRS.Common.Model.Helper
|
||||
{
|
||||
public class NoticedList<T> : List<T> where T : class
|
||||
{
|
||||
public Action<NotifyCollectionChangedAction> OnItemChanged;
|
||||
|
||||
public Action<NotifyCollectionChangedAction, List<T>> OnItemChangedWithItemInfo;
|
||||
|
||||
//public Action<NotifyCollectionChangedAction, NoticedList<T>> OnItemChangedWithSelf;
|
||||
|
||||
public new T this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (index >= 0 && index < Count)
|
||||
{
|
||||
return base[index];
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
set
|
||||
{
|
||||
if (base[index] != value)
|
||||
{
|
||||
base[index] = value;
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Replace);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Replace, new List<T>() { value });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public new void Add(T item)
|
||||
{
|
||||
base.Add(item);
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Add);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Add, new List<T>() { item });
|
||||
}
|
||||
|
||||
public new void AddRange(IEnumerable<T> collection)
|
||||
{
|
||||
base.AddRange(collection);
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Add);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Add, collection.ToList());
|
||||
}
|
||||
|
||||
public new void Clear()
|
||||
{
|
||||
base.Clear();
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Reset);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Reset, this);
|
||||
}
|
||||
|
||||
public new void Insert(int index, T item)
|
||||
{
|
||||
base.Insert(index, item);
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Add);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Add, new List<T>() { item });
|
||||
}
|
||||
|
||||
public new void InsertRange(int index, IEnumerable<T> collection)
|
||||
{
|
||||
base.InsertRange(index, collection);
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Add);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Add, collection.ToList());
|
||||
}
|
||||
|
||||
public new bool Remove(T item)
|
||||
{
|
||||
bool flag = base.Remove(item);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Remove);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Remove, new List<T>() { item });
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
public new int RemoveAll(Predicate<T> match)
|
||||
{
|
||||
List<T> temp = this.Where(u => match.Invoke(u)).ToList();
|
||||
int i = base.RemoveAll(match);
|
||||
if (i > 0)
|
||||
{
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Remove);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Remove, temp);
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
public new void RemoveAt(int index)
|
||||
{
|
||||
var item = this[index];
|
||||
base.RemoveAt(index);
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Remove);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Remove, new List<T>() { item });
|
||||
}
|
||||
|
||||
public new void RemoveRange(int index, int count)
|
||||
{
|
||||
List<T> temp = this.Skip(index).Take(count).ToList();
|
||||
base.RemoveRange(index, count);
|
||||
OnItemChanged?.Invoke(NotifyCollectionChangedAction.Remove);
|
||||
OnItemChangedWithItemInfo?.Invoke(NotifyCollectionChangedAction.Remove, temp);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user