// called by ObjectDataSource - set sort, grouping and filter info before calling load
 internal EntityQueryPagedCollectionView(EntityQuery query, int pageSize, int loadSize, 
   SortDescriptionCollection sortDescriptors, ObservableCollection<GroupDescription> groupDescriptors, IPredicateDescription filter) 
  : this(query, pageSize, loadSize, true, false) {
   sortDescriptors.ForEach(d => SortDescriptions.Add(d));
   groupDescriptors.ForEach(d=> GroupDescriptions.Add(d));
   SetQueryFilter(filter);
   Refresh();
 }
    private void LoadView() {
      // Create and start loading the PCV.

      // Neither EQPCV nor PCV will work with anonymous types.
      if (AnonymousFns.IsAnonymousType(Query.ElementType)) {
        throw new NotSupportedException("Anonymous types are not currently supported.  To work around this limitation, you can instead project into a custom type.");
      }

      if (IsEntityQuery) {
        EntityManager.GetEntityGroup(Query.ElementType).EntityChanged += ObjectDataSource_EntityChanged;
      }

      IsLoadingData = true;
      HasChanges = false;

      // Convert from our "descriptors" to the "descriptions" known by a PCV.
      var sortFields = new SortDescriptionCollection();
      SortDescriptors.ForEach(s => sortFields.Add(s.ToSortDescription()));
      var groupFields = new ObservableCollection<GroupDescription>();
      GroupDescriptors.ForEach(g => groupFields.Add(g.ToGroupDescription()));

      // We'll use an EQPCV or PCV depending on a few factors: 1) an EntityQuery (so we can issue skip/take, 2) paging
      bool useEqpcv = Query is EntityQuery && PageSize > 0;

      if (useEqpcv) {
        EntityQueryPagedCollectionView pcv = null;
        var query = Query as EntityQuery;
        var filter = GetQueryFilter();
        if (sortFields.Count > 0 || groupFields.Count > 0) {
          pcv = new EntityQueryPagedCollectionView(query, PageSize, LoadSize, sortFields, groupFields, filter);
        } else {
          pcv = new EntityQueryPagedCollectionView(query, PageSize, LoadSize, true, true);
          pcv.SetQueryFilter(filter);
          pcv.Refresh();
        }
        Data = pcv;
        DataView = pcv;

      } else {
        // Use the standard PagedCollectionView (when paging isn't wanted or not an EntityQuery)
        IEntityQuery query = Query;
        if (Query is EntityQuery) {
          query = GetFilteredQuery();
        }
        EntityManager.ExecuteQueryAsync(query, args => {
          PagedCollectionView pcv = new PagedCollectionView(args.Results);
          sortFields.ForEach(d => pcv.SortDescriptions.Add(d));
          groupFields.ForEach(d => pcv.GroupDescriptions.Add(d));
          pcv.PageSize = PageSize;
          Data = pcv;
          DataView = pcv;
        });
      }
    }
예제 #3
0
        private void LoadView()
        {
            // Create and start loading the PCV.

            // Neither EQPCV nor PCV will work with anonymous types.
            if (AnonymousFns.IsAnonymousType(Query.ElementType))
            {
                throw new NotSupportedException("Anonymous types are not currently supported.  To work around this limitation, you can instead project into a custom type.");
            }

            if (IsEntityQuery)
            {
                EntityManager.GetEntityGroup(Query.ElementType).EntityChanged += ObjectDataSource_EntityChanged;
            }

            IsLoadingData = true;
            HasChanges    = false;

            // Convert from our "descriptors" to the "descriptions" known by a PCV.
            var sortFields = new SortDescriptionCollection();

            SortDescriptors.ForEach(s => sortFields.Add(s.ToSortDescription()));
            var groupFields = new ObservableCollection <GroupDescription>();

            GroupDescriptors.ForEach(g => groupFields.Add(g.ToGroupDescription()));

            // We'll use an EQPCV or PCV depending on a few factors: 1) an EntityQuery (so we can issue skip/take, 2) paging
            bool useEqpcv = Query is EntityQuery && PageSize > 0;

            if (useEqpcv)
            {
                EntityQueryPagedCollectionView pcv = null;
                var query  = Query as EntityQuery;
                var filter = GetQueryFilter();
                if (sortFields.Count > 0 || groupFields.Count > 0)
                {
                    pcv = new EntityQueryPagedCollectionView(query, PageSize, LoadSize, sortFields, groupFields, filter);
                }
                else
                {
                    pcv = new EntityQueryPagedCollectionView(query, PageSize, LoadSize, true, true);
                    pcv.SetQueryFilter(filter);
                    pcv.Refresh();
                }
                Data     = pcv;
                DataView = pcv;
            }
            else
            {
                // Use the standard PagedCollectionView (when paging isn't wanted or not an EntityQuery)
                IEntityQuery query = Query;
                if (Query is EntityQuery)
                {
                    query = GetFilteredQuery();
                }
                EntityManager.ExecuteQueryAsync(query, args => {
                    PagedCollectionView pcv = new PagedCollectionView(args.Results);
                    sortFields.ForEach(d => pcv.SortDescriptions.Add(d));
                    groupFields.ForEach(d => pcv.GroupDescriptions.Add(d));
                    pcv.PageSize = PageSize;
                    Data         = pcv;
                    DataView     = pcv;
                });
            }
        }