/// <summary>
        /// Removes the Item that corresponds to value.
        /// </summary>
        /// <param name="value">object</param>
        public virtual void Remove(Item.Base value)
        {
            bool Cancel = false;

            if (SuppressEvents == false)
            {
                if (ItemRemovedEvent != null)
                {
                    ItemRemovedEvent(ref value, ref Cancel);
                }
            }

            if (Cancel)
            {
                return;
            }

            if (_useSortedList)
            {
                _sortedList.Remove(value);
            }
            else
            {
                _list.Remove(value);
            }
        }
        /// <summary>
        /// removes the Item at Index
        /// </summary>
        /// <param name="index">int</param>
        public virtual void RemoveAt(int index)
        {
            bool Cancel = false;

            Item.Base MyItem = null;

            if (SuppressEvents == false)
            {
                if (ItemRemovedEvent != null)
                {
                    MyItem = (Item.Base)_list[index];
                }
                ItemRemovedEvent(ref MyItem, ref Cancel);
            }

            if (Cancel)
            {
                return;
            }

            if (_useSortedList)
            {
                _sortedList.RemoveAt(index);
            }
            else
            {
                _list.RemoveAt(index);
            }
            _dirty = true;
        }
 public virtual void AddWithCancel(Item.Base myItem)
 {
     _list.Add(myItem);
     if (base.SuppressEvents == false)
     {
         if (ItemAddedWithCancelEvent != null)
         {
             ItemAddedWithCancelEvent(ref myItem, ref _cancelLoad);
         }
     }
     if (!_cancelLoad)
     {
         _dirty = true;
     }
 }
        /// <summary>
        /// Removes the Item that has Key
        /// </summary>
        /// <param name="key">string</param>
        public virtual void Remove(string key)
        {
            bool Cancel = false;

            Item.Base MyItem = null;

            if (_useSortedList)
            {
                if (SuppressEvents == false)
                {
                    if (ItemRemovedEvent != null)
                    {
                        MyItem = (Item.Base)_sortedList[key];
                    }
                    ItemRemovedEvent(ref MyItem, ref Cancel);
                }
                if (Cancel)
                {
                    return;
                }

                _sortedList.Remove(key);
                _dirty = true;
            }
            else
            {
                for (int Idx = 0; Idx <= _list.Count - 1; Idx++)
                {
                    if (((Item.Base)_list[Idx]).Key == key)
                    {
                        RemoveAt(Idx);
                        break;
                    }
                }
            }
        }