>>>>>>>public class Collection<T> : IEnumerable<T> >>>>>>>{ >>>>>>> public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); >>>>>>> public delegate void ListClearedEventHandler(object sender, ListClearedEventArgs e); >>>>>>> >>>>>>> public event ListClearedEventHandler Cleared; >>>>>>> public event EventHandler<EventArgs_Generic<T>> ItemAdded; >>>>>>> public event EventHandler<EventArgs_Generic<T>> ItemRemoved; >>>>>>> >>>>>>> List<T> _List = new List<T>(); >>>>>>> >>>>>>> private int _Count = 0; >>>>>>> public int Count >>>>>>> { >>>>>>> get { return _Count; } >>>>>>> } >>>>>>> public void Add(T item) >>>>>>> { >>>>>>> _List.Add(item); >>>>>>> _Count++; >>>>>>> >>>>>>> if (ItemAdded != null) >>>>>>> { >>>>>>> EventArgs_Generic<T> args = new EventArgs_Generic<T>(item); >>>>>>> ItemAdded(this, args); >>>>>>> } >>>>>>> } >>>>>>> public void Clear() >>>>>>> { >>>>>>> _List.Clear(); >>>>>>> _Count = 0; >>>>>>> >>>>>>> if (Cleared != null) >>>>>>> { >>>>>>> ListClearedEventArgs args = new ListClearedEventArgs(); >>>>>>> Cleared(this, args); >>>>>>> } >>>>>>> } >>>>>>> public void Insert(int index, T item) >>>>>>> { >>>>>>> _List.Insert(index, item); >>>>>>> _Count++; >>>>>>> >>>>>>> if (ItemAdded != null) >>>>>>> { >>>>>>> EventArgs_Generic<T> args = new EventArgs_Generic<T>(item); >>>>>>> ItemAdded(this, args); >>>>>>> } >>>>>>> } >>>>>>> public void Remove(T item) >>>>>>> { >>>>>>> _List.Remove(item); >>>>>>> _Count--; >>>>>>> >>>>>>> if (ItemRemoved != null) >>>>>>> { >>>>>>> EventArgs_Generic<T> args = new EventArgs_Generic<T>(item); >>>>>>> ItemRemoved(this, args); >>>>>>> } >>>>>>> } >>>>>>> public T GetItem(int index) >>>>>>> { >>>>>>> return _List[index]; >>>>>>> } >>>>>>> >>>>>>> IEnumerator<T> IEnumerable<T>.GetEnumerator() >>>>>>> { >>>>>>> return _List.GetEnumerator(); >>>>>>> } >>>>>>> IEnumerator IEnumerable.GetEnumerator() >>>>>>> { >>>>>>> return _List.GetEnumerator(); >>>>>>> } >>>>>>>} >>>>>>> >>>>>>>public class EventArgs_Generic<T> : EventArgs >>>>>>>{ >>>>>>> private T _TargetObject; >>>>>>> public T TargetObject >>>>>>> { >>>>>>> get { return _TargetObject; } >>>>>>> } >>>>>>> >>>>>>> public EventArgs_Generic() >>>>>>> { >>>>>>> } >>>>>>> public EventArgs_Generic(T Target) >>>>>>> { >>>>>>> _TargetObject = Target; >>>>>>> } >>>>>>>} >>>>>>> >>>>>>>public class ListClearedEventArgs : EventArgs >>>>>>>{ >>>>>>>} >>>>>>>>>>>>>>
>>>>>>>private Collection<MyRow> _Rows = new Collection< MyRow >(); >>>>>>>public Collection< MyRow > Rows >>>>>>>{ >>>>>>> get { return _Rows; } >>>>>>> set { _Rows = value; } >>>>>>>} >>>>>>>>>>>>>>
>>>>>>>public MyList() >>>>>>>{ >>>>>>> InitializeComponent(); >>>>>>> >>>>>>> _Rows.ItemAdded += new Collection<MyRow>.EventHandler<EventArgs_Generic< MyRow >>(_Rows_ItemAdded); >>>>>>> _Rows.ItemRemoved += new Collection< MyRow >.EventHandler<EventArgs_Generic< MyRow >>(_Rows_ItemRemoved); >>>>>>> _Rows.Cleared += new Collection< MyRow >.ListClearedEventHandler(_Rows_Cleared); >>>>>>> >>>>>>> _Setup = true; >>>>>>>} >>>>>>>>>>>>>>
>>>>>>>private void _Rows_ItemAdded(object sender, EventArgs_Generic< MyRow > e) >>>>>>>{ >>>>>>>} >>>>>>>private void _Rows_ItemRemoved(object sender, EventArgs_Generic< MyRow > e) >>>>>>>{ >>>>>>>} >>>>>>>private void _Rows_Cleared(object sender, ListClearedEventArgs e) >>>>>>>{ >>>>>>> Controls.Clear(); >>>>>>>} >>>>>>>>>>>>>>
>>>>>>>MyList.Rows.Clear(); >>>>>>>>>>>>>>
_Rows.ItemAdded += _Rows_ItemAdded; >>>>>>_Rows.ItemRemoved += _Rows_ItemRemoved; >>>>>>_Rows.Cleared += _Rows_Cleared;>>>>>
public class MyRow >>>>{ >>>>} >>>> >>>> >>>>public class Test >>>>{ >>>> private Collection<MyRow> _Rows = new Collection<MyRow>(); >>>> public Collection<MyRow> Rows >>>> { >>>> get { return _Rows; } >>>> set { _Rows = value; } >>>> } >>>> >>>> public Test() >>>> { >>>> _Rows.ItemAdded += _Rows_ItemAdded; >>>> _Rows.ItemRemoved += _Rows_ItemRemoved; >>>> _Rows.Cleared += _Rows_Cleared; >>>> } >>>> >>>> public void TestAction() >>>> { >>>> Rows.Clear(); >>>> Rows.Add(new MyRow()); >>>> >>>> } >>>> >>>> private void _Rows_ItemAdded(object sender, EventArgs_Generic<MyRow> e) >>>> { >>>> } >>>> private void _Rows_ItemRemoved(object sender, EventArgs_Generic<MyRow> e) >>>> { >>>> } >>>> private void _Rows_Cleared(object sender, ListClearedEventArgs e) >>>> { >>>> >>>> } >>>>}>>>
>public void Clear() >{ > _List.Clear(); > _Count = 0; > > if (Cleared != null) > { > ListClearedEventArgs args = new ListClearedEventArgs(); > Cleared(this, args); > } >} >>
public Collection<XLinkRow> Rows { get { return _Rows; } set { _Rows = value; _LoadRows(); } }You wire up the event handlers to an instance of Collection< XLinkRow > then replace it with another one. Needs a redesign really but you can use this instead:
public Collection<XLinkRow> Rows { get { return _Rows; } set { _Rows.Clear(); foreach (XLinkRow x in value) Rows.Add(x); } }