1 public abstract class CollectionWrapper<T> : IList<T>
2 {
3 private List<T> _InnerList;
4
5 protected List<T> InnerList
6 {
7 get { return _InnerList == null ? new List<T>() : _InnerList; }
8 set { _InnerList = value; }
9 }
10
11 private bool _IsDirty;
12
13 public bool IsDirty
14 {
15 get { return _IsDirty; }
16 set { _IsDirty = value; }
17 }
18 #region IList<T> Members ...
19
20
21 public int IndexOf(T item)
22 {
23 return InnerList.IndexOf(item);
24 }
25
26 public void Insert(int index, T item)
27 {
28 IsDirty = true;
29
30 InnerList.Insert(index, item);
31 }
32
33 public void RemoveAt(int index)
34 {
35 IsDirty = true;
36
37 InnerList.RemoveAt(index);
38 }
39
40 public T this[int index]
41 {
42 get
43 {
44 return InnerList[index];
45 }
46 set
47 {
48 InnerList[index] = value;
49 }
50 }
51 #endregion
52 #region ICollection<T> Members ...
53
54
55 public void Add(T item)
56 {
57 IsDirty = true;
58 InnerList.Add(item);
59 }
60
61 public void Clear()
62 {
63 IsDirty = true;
64 InnerList.Clear();
65 }
66
67 public void CopyTo(T[] array, int arrayIndex)
68 {
69 InnerList.CopyTo(array, arrayIndex);
70 }
71
72 public bool Contains(T item)
73 {
74 return InnerList.Contains(item);
75 }
76
77 public int Count
78 {
79 get { return InnerList.Count; }
80 }
81
82 public bool IsReadOnly
83 {
84 get { return false; }
85 }
86
87 public bool Remove(T item)
88 {
89 if (InnerList.Remove(item))
90 {
91 IsDirty = true;
92 return true;
93 }
94 return false;
95 }
96 #endregion
97 #region IEnumerable<T> Members ...
98
99
100 public IEnumerator<T> GetEnumerator()
101 {
102 return InnerList.GetEnumerator();
103 }
104 #endregion
105 #region IEnumerable Members ...
106
107
108 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
109 {
110 return InnerList.GetEnumerator();
111 }
112 #endregion
113 }