Beispiel #1
0
 private IDictionary <long, T> ToMutableDictionary <T>(ImmutableSortedList <long, T> immutableSortedList)
 {
     if (null == immutableSortedList)
     {
         return(new Dictionary <long, T>());
     }
     return(new Dictionary <long, T>(immutableSortedList.AsDictionary()));
 }
Beispiel #2
0
        public virtual void Update(WorkspaceChangeArgs workspaceChange)
        {
            if (null == _entityList)
            {
                return;
            }
            var  newData = GetData(Workspace.Data) ?? ImmutableSortedList <TKey, TData> .EMPTY;
            var  newKeys = new HashSet <TKey>(newData.Keys);
            bool changed = !Equals(newData.Keys, _entityList.Keys);

            if (changed)
            {
                var entities = new Dictionary <TKey, TEntity>(_entityList.AsDictionary());
                foreach (var key in newKeys)
                {
                    TEntity entity;
                    if (!entities.TryGetValue(key, out entity))
                    {
                        TData itemData;
                        newData.TryGetValue(key, out itemData);
                        entities.Add(key, CreateEntityForKey(key, itemData));
                    }
                }
                _entityList = ImmutableSortedList.FromValues(entities, _entityList.KeyComparer);
            }
            foreach (var entity in _entityList.Values)
            {
                TData itemData;
                var   key = GetKey(entity);
                newData.TryGetValue(key, out itemData);
                entity.Update(workspaceChange, itemData);
            }
            if (changed)
            {
                var listChanged = ListChanged;
                if (listChanged != null)
                {
                    listChanged(this, new ListChangedEventArgs(ListChangedType.Reset, -1));
                }
            }
        }