Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/07/11 12:49:03 (13 years ago)
Author:
mkommend
Message:

#1479: Merged trunk changes into branch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GP.Grammar.Editor/HeuristicLab.Collections/3.3/ObservableList.cs

    r5445 r6377  
    2424using System.Collections.Generic;
    2525using System.ComponentModel;
     26using System.Linq;
    2627using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2728
     
    211212    }
    212213
     214    /// <summary>
     215    /// Performs a Clear and an AddRange, but does not fire separate events for those operations
     216    /// </summary>
     217    /// <param name="collection"></param>
     218    public void Replace(IEnumerable<T> collection) {
     219      List<IndexedItem<T>> oldItems = null;
     220      if (list.Any()) oldItems = list.Select((x, i) => new IndexedItem<T>(i, x)).ToList();
     221      else oldItems = new List<IndexedItem<T>>();
     222
     223      int oldCapacity = list.Capacity;
     224      list.Clear();
     225      list.AddRange(collection);
     226
     227      List<IndexedItem<T>> items = null;
     228      if (list.Any()) items = list.Select((x, i) => new IndexedItem<T>(i, x)).ToList();
     229      else items = new List<IndexedItem<T>>();
     230
     231      if (oldCapacity != list.Capacity) OnPropertyChanged("Capacity");
     232      OnPropertyChanged("Item[]");
     233      if (oldItems.Count != items.Count) OnPropertyChanged("Count");
     234      OnItemsReplaced(items, oldItems);
     235    }
     236
    213237    public bool Remove(T item) {
    214238      int index = list.IndexOf(item);
Note: See TracChangeset for help on using the changeset viewer.