This question is locked. New answers and comments are not allowed.
                        
                        Hi, 
I'm trying to use the VirtualQueryableCollectionView to query data via DevForce/IdeaBlade. Unfortunately I'm facing a lot of problems. We use MVVM so my RadGridView binds to the VirtualQueryableCollectionView on my ViewModel. For better integration with DevForce I've inherited the collection and added some DevForce specific stuff.
I want to sync grid data with DevForce's EntityManager Entites but adding and refreshing data doesn't work quite well with the VirtualQueryableCollectionView. Can someone give me a hint how I can handle that?
Thanks,
Sven
Here is my class so far:
 
 
 
 
 
 
 
 
 
 
 
 
                                I'm trying to use the VirtualQueryableCollectionView to query data via DevForce/IdeaBlade. Unfortunately I'm facing a lot of problems. We use MVVM so my RadGridView binds to the VirtualQueryableCollectionView on my ViewModel. For better integration with DevForce I've inherited the collection and added some DevForce specific stuff.
I want to sync grid data with DevForce's EntityManager Entites but adding and refreshing data doesn't work quite well with the VirtualQueryableCollectionView. Can someone give me a hint how I can handle that?
Thanks,
Sven
Here is my class so far:
public class EntityQueryableCollectionView<T> : VirtualQueryableCollectionView where T : Entity   {       public IEntityQuery<T> Query { get; set; }       public IEntityQuery<T> BaseQuery { get { return (EntityQuery<T>)Query.Where(FilterDescriptors); } }       public Expression<Func<T, object>> InitialOrderBy { get; set; }       public ListSortDirection InitialOrderByDirection { get; set; }       public EntityQueryableCollectionView(IEntityQuery<T> query, Expression<Func<T, object>> orderBy, ListSortDirection direction = ListSortDirection.Ascending)           : base()       {           Query = query;           InitialOrderBy = orderBy;           InitialOrderByDirection = direction;           LoadSize = 20;           ItemsLoading += (s, e) => LoadData(e.StartIndex, e.ItemCount);           FilterDescriptors.CollectionChanged += (s, e) => CountRecords();           FilterDescriptors.ItemChanged += (s, e) => CountRecords();           CountRecords();       }       public void CountRecords()       {           var countQuery = BaseQuery               .AsScalarAsync()               .Count();           countQuery.Completed += (sender, args) => VirtualItemCount = args.Result;       }       public void LoadData(int startIndex, int itemCount)       {           var baseQuery = (EntityQuery<T>)Query               .Where(FilterDescriptors);           // Skip needs an order           if (SortDescriptors.Count == 0)               SortDescriptions.Add(new SortDescription(InitialOrderBy.AsString(), InitialOrderByDirection));           var resultQuery = (EntityQuery<T>)baseQuery               .Sort(SortDescriptors)               .Skip(startIndex).Take(itemCount);           resultQuery.QueryStrategy = new QueryStrategy(FetchStrategy.DataSourceAndCache, MergeStrategy.PreserveChanges);           resultQuery.ExecuteAsync().Completed += (s, e) =>               Load(startIndex, e.Results.Where(entity => entity.EntityAspect.EntityState.InList(EntityState.Added, EntityState.Modified, EntityState.Unchanged)));       }       public new int Add(object item)       {           Query.EntityManager.AddEntity(item);           var pos = base.Add(item);           Refresh();           MoveCurrentTo(item);           return pos;       }       public override void Remove(object item)       {           MoveCurrentToNext();           (item as Entity).EntityAspect.Delete();           base.Remove(item);       }   }
