private static void ProcessDispose(
        DataGridCollectionViewBase collectionView,
        object oldCurrentItem,
        int oldCurrentPosition,
        bool oldIsCurrentBeforeFirst,
        bool oldIsCurrentAfterLast )
      {
        if( Interlocked.Decrement( ref collectionView.m_deferCurrencyEventCount ) > 0 )
          return;

        bool itemChanged = false;

        if( !object.Equals( oldCurrentItem, collectionView.CurrentItem ) )
        {
          itemChanged = true;
          collectionView.OnPropertyChanged( new PropertyChangedEventArgs( "CurrentItem" ) );
        }

        if( oldCurrentPosition != collectionView.CurrentPosition )
        {
          itemChanged = true;
          collectionView.OnPropertyChanged( new PropertyChangedEventArgs( "CurrentPosition" ) );
        }

        if( oldIsCurrentBeforeFirst != collectionView.IsCurrentBeforeFirst )
        {
          itemChanged = true;
          collectionView.OnPropertyChanged( new PropertyChangedEventArgs( "IsCurrentBeforeFirst" ) );
        }

        if( oldIsCurrentAfterLast != collectionView.IsCurrentAfterLast )
        {
          itemChanged = true;
          collectionView.OnPropertyChanged( new PropertyChangedEventArgs( "IsCurrentAfterLast" ) );
        }

        if( itemChanged )
        {
          collectionView.OnCurrentChanged();
        }
      }