/// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="source">Relação da coleção de origem dos dados.</param>
 /// <param name="comparer">Comparador que será utilizado para ordenar os itens.</param>
 public SortableObservableCollection(IObservableCollection <T> source, IComparer <T> comparer)
 {
     source.Require("source").NotNull();
     comparer.Require("comparer").NotNull();
     _source   = source;
     _comparer = comparer;
     _comparerPropertiesContainer = comparer as IPropertiesContainer;
     _source.CollectionChanged   += SourceCollectionChanged;
     _indexes = new BaseObservableCollection <int>();
     for (var i = 0; i < _source.Count; i++)
     {
         _indexes.Add(i);
     }
     foreach (var i in _source)
     {
         RegisterItem(i);
     }
     CalculateIndexes();
 }
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="owner"></param>
 public ReentracyMonitor(BaseObservableCollection <T> owner)
 {
     _owner = owner;
     lock (_owner._reentrancyThreads)
         _owner._reentrancyThreads.Add(System.Threading.Thread.CurrentThread);
 }