private static void ProcessDispose( DataGridCollectionViewBase collectionView )
      {
        //If there are detail DataGridCollectionView's being defered.
        if( collectionView.m_detailDeferRefreshes != null && collectionView.m_detailDeferRefreshes.Count > 0 )
        {
          //Dispose them.
          foreach( IDisposable detailDisposable in collectionView.m_detailDeferRefreshes[ 0 ] )
          {
            if( detailDisposable != null )
            {
              detailDisposable.Dispose();
            }
          }

          //Clear and remove the list that was just disposed of.
          collectionView.m_detailDeferRefreshes[ 0 ].Clear();
          collectionView.m_detailDeferRefreshes.RemoveAt( 0 );
        }

        //Only process the DeferRefresh when count is back to 0.
        if( Interlocked.Decrement( ref collectionView.m_deferRefreshCount ) > 0 )
          return;

        if( collectionView.Loaded )
        {
          collectionView.m_deferredOperationManager.Process();
        }
        else
        {
          // We call ForceRefresh when not yet "Loaded" because we want the Dispose here to triger the CollectionChanged( NotifyCollectionChangedAction.Reset )
          // This is needed because of the way the ItemsControl works (other than our grid).
          collectionView.ForceRefresh( true, true, true );
        }
      }