public
partial
class
MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
var service =
new
NorthwindEntities(
new
Uri(
"http://services.odata.org/Northwind/Northwind.svc/"
));
DataContext =
new
VirtualQueryableCollectionView(service.Customers) { LoadSize = 10 };
}
}
public
class
CustomVirtualQueryableCollectionView<T> : VirtualQueryableCollectionView
{
private
readonly
IQueryable<T> query;
private
readonly
DataServiceContext context;
private
readonly
DataServiceCollection<T> dataServiceCollection;
public
CustomVirtualQueryableCollectionView(DataServiceContext context, IQueryable<T> source)
:
base
(source)
{
this
.context = context;
this
.query = source;
this
.dataServiceCollection =
new
DataServiceCollection<T>();
}
protected
override
IQueryable CreateView()
{
if
(
this
.IsGrouped)
{
// Load all data from the WCF Data Service since GroupBy is not supported!
this
.dataServiceCollection.Load(
this
.query);
while
(
this
.dataServiceCollection.Continuation !=
null
)
{
this
.dataServiceCollection.Load(context.Execute<T>(
this
.dataServiceCollection.Continuation.NextLinkUri));
}
// Group data in-memory.
return
this
.dataServiceCollection.AsQueryable().GroupBy(
this
.GroupDescriptors);
}
return
base
.CreateView();
}
}
Vladimir Enchev is Director of Engineering, Native Mobile UI & Frameworks