protected override void RemoveItem(int index)
        {
            ModelItemKeyValuePair <TKey, TValue> item = this[index];

            Fx.Assert(item != null, "Item should not be null.");
            if (ShouldUpdateDictionary)
            {
                this.dictionary.Remove(item.Key);
            }

            base.RemoveItem(index);
        }
 public DictionaryItemsCollection(object dictionary)
 {
     this.ShouldUpdateDictionary = true;
     this.dictionary             = dictionary as IDictionary <TKey, TValue>;
     Fx.Assert(this.dictionary != null, "dictionary should be instantiated");
     foreach (KeyValuePair <TKey, TValue> kvpair in this.dictionary)
     {
         ModelItemKeyValuePair <TKey, TValue> item = new ModelItemKeyValuePair <TKey, TValue>(kvpair.Key, kvpair.Value);
         item.collection = this;
         base.InsertItem(this.Count, item);
     }
 }
        protected override void SetItem(int index, ModelItemKeyValuePair <TKey, TValue> item)
        {
            if (item == null)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("item"));
            }
            item.collection = this;
            ModelItemKeyValuePair <TKey, TValue> oldItem = this[index];

            Fx.Assert(oldItem != null, "Item should not be null.");
            this.PreUpdateKey(oldItem.Key, item.Key);
            base.SetItem(index, item);
            this.PostUpdateKey();
        }
        protected override void InsertItem(int index, ModelItemKeyValuePair <TKey, TValue> item)
        {
            if (item == null)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("item"));
            }

            if (ShouldUpdateDictionary && this.dictionary.ContainsKey(item.Key))
            {
                throw FxTrace.Exception.AsError(new ArgumentException(SR.DuplicateKey));
            }

            item.collection = this;
            base.InsertItem(index, item);

            this.UpdateDictionary();
        }