コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }