protected internal override void OnQueryItemsCompleted(VirtualPage page, AsyncQueryInfo queryInfo, object[] fetchedItems)
        {
            DataGridVirtualizingQueryableCollectionView collectionView = this.CollectionView as DataGridVirtualizingQueryableCollectionView;

            // The VirtualPageManager was Disposed
            if (collectionView == null)
            {
                return;
            }

            using (collectionView.DeferRefresh())
            {
                base.OnQueryItemsCompleted(page, queryInfo, fetchedItems);
            }
        }
        internal DataGridVirtualizingQueryableCollectionViewGroupRoot(
            DataGridVirtualizingQueryableCollectionView collectionView,
            object pageManagerSyncRoot,
            bool isBottomLevel)
            : base(null, -1, 0, null, -1, isBottomLevel)
        {
            m_parentCollectionView = collectionView;
            m_queryableSource      = m_parentCollectionView.QueryableSource;

            if (m_queryableSource != null)
            {
                m_primaryKeyPropertyNames = m_queryableSource.FindPrimaryKeys();
                // Primary key optimizations are only possible when only one primary key is identified in the source.
                // When dealing with sources defining more than one primary key, we would need to know in which order
                bool supportsPrimaryKeyOptimizations = ((m_primaryKeyPropertyNames != null) && (m_primaryKeyPropertyNames.Length == 1));

                m_virtualPageManager = new DataGridLINQPageManager(collectionView,
                                                                   pageManagerSyncRoot,
                                                                   supportsPrimaryKeyOptimizations);
            }
        }
 public DataGridLINQPageManager(DataGridVirtualizingQueryableCollectionView collectionView, object syncRoot, bool supportsPrimaryKeyOptimizations)
     : base(collectionView)
 {
     m_supportsPrimaryKeyOptimizations = supportsPrimaryKeyOptimizations;
     m_syncRoot = syncRoot;
 }