public void Add(string key, IMetadata value) { int index; IMetadata oldMetadata = null; value.PropertyChanged += ValueOnPropertyChanged; if (Metadata.ContainsKey(key)) { MetadataDictionaryPair metadataPair = Metadata[key]; index = metadataPair.Index; oldMetadata = metadataPair.Metadata; if (key != value.Name) { Metadata.Remove(key); Metadata.Add(value.Name, metadataPair); } else { metadataPair.Metadata = value; } } else { index = Metadata.Count; // An 'index' is zero-based. Count is not zero-based meaning it is already 1 higher than the last index. MetadataDictionaryPair metadataPair = new MetadataDictionaryPair(); metadataPair.Index = index; metadataPair.Metadata = value; Metadata.Add(key, metadataPair); } if (CollectionChanged != null) { NotifyCollectionChangedEventArgs changeEventArgs; if (oldMetadata == null) { changeEventArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, value, index); } else { changeEventArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, value, oldMetadata, index); } CollectionChanged(value, changeEventArgs); } }
bool ICollection <KeyValuePair <string, IMetadata> > .Contains(KeyValuePair <string, IMetadata> item) { if (ContainsKey(item.Key)) { MetadataDictionaryPair metadataDictionaryPair = Metadata[item.Key]; if (metadataDictionaryPair.Metadata == item.Value) { return(true); } } return(false); }