Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/10/12 13:17:25 (12 years ago)
Author:
mkommend
Message:

#1946:

  • Added 'ObservableKeyedList` and related classes
  • Reordered firing events in ObservableList
  • Adapted cloning ctor of ReadOnlyItemList
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Collections/3.3/ObservableList.cs

    r7259 r8610  
    158158      int capacity = list.Capacity;
    159159      list.Add(item);
     160      OnItemsAdded(new IndexedItem<T>[] { new IndexedItem<T>(list.Count - 1, item) });
     161      OnItemsAdded(new T[] { item });
    160162      if (list.Capacity != capacity)
    161163        OnPropertyChanged("Capacity");
    162164      OnPropertyChanged("Item[]");
    163165      OnPropertyChanged("Count");
    164       OnItemsAdded(new IndexedItem<T>[] { new IndexedItem<T>(list.Count - 1, item) });
    165       OnItemsAdded(new T[] { item });
    166166    }
    167167    public void AddRange(IEnumerable<T> collection) {
     
    175175      }
    176176      if (items.Count > 0) {
     177        OnItemsAdded(items);
     178        OnItemsAdded(collection);
    177179        if (list.Capacity != capacity)
    178180          OnPropertyChanged("Capacity");
    179181        OnPropertyChanged("Item[]");
    180182        OnPropertyChanged("Count");
    181         OnItemsAdded(items);
    182         OnItemsAdded(collection);
    183183      }
    184184    }
     
    187187      int capacity = list.Capacity;
    188188      list.Insert(index, item);
     189      OnItemsAdded(new IndexedItem<T>[] { new IndexedItem<T>(index, item) });
     190      OnItemsAdded(new T[] { item });
    189191      if (list.Capacity != capacity)
    190192        OnPropertyChanged("Capacity");
    191193      OnPropertyChanged("Item[]");
    192194      OnPropertyChanged("Count");
    193       OnItemsAdded(new IndexedItem<T>[] { new IndexedItem<T>(index, item) });
    194       OnItemsAdded(new T[] { item });
    195195    }
    196196    public void InsertRange(int index, IEnumerable<T> collection) {
     
    203203      }
    204204      if (items.Count > 0) {
     205        OnItemsAdded(items);
     206        OnItemsAdded(collection);
    205207        if (list.Capacity != capacity)
    206208          OnPropertyChanged("Capacity");
    207209        OnPropertyChanged("Item[]");
    208210        OnPropertyChanged("Count");
    209         OnItemsAdded(items);
    210         OnItemsAdded(collection);
    211211      }
    212212    }
     
    229229      else items = new List<IndexedItem<T>>();
    230230
     231      OnItemsReplaced(items, oldItems);
    231232      if (oldCapacity != list.Capacity) OnPropertyChanged("Capacity");
    232233      OnPropertyChanged("Item[]");
    233234      if (oldItems.Count != items.Count) OnPropertyChanged("Count");
    234       OnItemsReplaced(items, oldItems);
    235235    }
    236236
     
    239239      if (index != -1) {
    240240        list.RemoveAt(index);
    241         OnPropertyChanged("Item[]");
    242         OnPropertyChanged("Count");
    243241        OnItemsRemoved(new IndexedItem<T>[] { new IndexedItem<T>(index, item) });
    244242        OnItemsRemoved(new T[] { item });
     243        OnPropertyChanged("Item[]");
     244        OnPropertyChanged("Count");
    245245        return true;
    246246      }
     
    260260      if (indexedItems.Count > 0) {
    261261        result = list.RemoveAll(match);
    262         OnPropertyChanged("Item[]");
    263         OnPropertyChanged("Count");
    264262        OnItemsRemoved(indexedItems);
    265263        OnItemsRemoved(items);
     264        OnPropertyChanged("Item[]");
     265        OnPropertyChanged("Count");
    266266      }
    267267      return result;
     
    270270      T item = list[index];
    271271      list.RemoveAt(index);
     272      OnItemsRemoved(new IndexedItem<T>[] { new IndexedItem<T>(index, item) });
     273      OnItemsRemoved(new T[] { item });
    272274      OnPropertyChanged("Item[]");
    273275      OnPropertyChanged("Count");
    274       OnItemsRemoved(new IndexedItem<T>[] { new IndexedItem<T>(index, item) });
    275       OnItemsRemoved(new T[] { item });
    276276    }
    277277    public void RemoveRange(int index, int count) {
     
    281281        list.CopyTo(index, items, 0, count);
    282282        list.RemoveRange(index, count);
    283         OnPropertyChanged("Item[]");
    284         OnPropertyChanged("Count");
    285283        OnItemsRemoved(indexedItems);
    286284        OnItemsRemoved(items);
     285        OnPropertyChanged("Item[]");
     286        OnPropertyChanged("Count");
    287287      }
    288288    }
     
    293293        T[] items = list.ToArray();
    294294        list.Clear();
    295         OnPropertyChanged("Item[]");
    296         OnPropertyChanged("Count");
    297295        OnCollectionReset(new IndexedItem<T>[0], indexedItems);
    298296        OnCollectionReset(new T[0], items);
     297        OnPropertyChanged("Item[]");
     298        OnPropertyChanged("Count");
    299299      }
    300300    }
     
    304304        IndexedItem<T>[] oldItems = GetIndexedItems();
    305305        list.Reverse();
    306         OnPropertyChanged("Item[]");
    307306        OnItemsMoved(GetIndexedItems(), oldItems);
     307        OnPropertyChanged("Item[]");
    308308      }
    309309    }
     
    312312        IndexedItem<T>[] oldItems = GetIndexedItems(index, count);
    313313        list.Reverse(index, count);
    314         OnPropertyChanged("Item[]");
    315314        OnItemsMoved(GetIndexedItems(index, count), oldItems);
     315        OnPropertyChanged("Item[]");
    316316      }
    317317    }
     
    321321        IndexedItem<T>[] oldItems = GetIndexedItems();
    322322        list.Sort();
    323         OnPropertyChanged("Item[]");
    324323        OnItemsMoved(GetIndexedItems(), oldItems);
     324        OnPropertyChanged("Item[]");
    325325      }
    326326    }
     
    329329        IndexedItem<T>[] oldItems = GetIndexedItems();
    330330        list.Sort(comparison);
    331         OnPropertyChanged("Item[]");
    332331        OnItemsMoved(GetIndexedItems(), oldItems);
     332        OnPropertyChanged("Item[]");
    333333      }
    334334    }
     
    337337        IndexedItem<T>[] oldItems = GetIndexedItems();
    338338        list.Sort(comparer);
    339         OnPropertyChanged("Item[]");
    340339        OnItemsMoved(GetIndexedItems(), oldItems);
     340        OnPropertyChanged("Item[]");
    341341      }
    342342    }
     
    345345        IndexedItem<T>[] oldItems = GetIndexedItems(index, count);
    346346        list.Sort(index, count, comparer);
    347         OnPropertyChanged("Item[]");
    348347        OnItemsMoved(GetIndexedItems(index, count), oldItems);
     348        OnPropertyChanged("Item[]");
    349349      }
    350350    }
     
    355355      return new ReadOnlyObservableList<T>(this);
    356356    }
     357
    357358    public T[] ToArray() {
    358359      return list.ToArray();
Note: See TracChangeset for help on using the changeset viewer.