Tôi vừa mới công bố một vài bài đăng trên blog (Part 1, Part 2) mà đưa ra giải pháp của tôi cho vấn đề này. Tôi cũng đã đăng a sample để GitHub thực hiện của riêng tôi đi trên khái niệm VirtualCollection (Tôi không biết làm thế nào điều này so sánh với kiểm soát của Infragistics, bởi vì tôi đã không được sử dụng đó).
Để hiển thị mức độ dễ sử dụng, dưới đây là một vài đoạn từ mẫu. Thứ nhất, đây là cách bạn sử dụng VirtualCollection, lớp mà tọa độ lấy dữ liệu:
public class MainViewModel : ViewModel
{
private NetflixTitlesSource _source;
public VirtualCollection<Title> Items { get; private set; }
public MainViewModel()
{
_source = new NetflixTitlesSource();
Items = new VirtualCollection<Title>(_source, pageSize: 20, cachedPages: 5);
}
protected override void OnViewLoaded()
{
Items.Refresh();
}
}
Trong XAML bạn chỉ ràng buộc Items
tài sản cho ItemsSource
tài sản của một ListBox
hoặc DataGrid
Đối với mỗi nguồn dữ liệu bạn phải triển khai VirtualCollectionSource. Dưới đây là hai phương pháp chính của NetflixTitlesSource trông giống như:
public class NetflixTitlesSource : VirtualCollectionSource<Title>
{
protected override Task<int> GetCount()
{
return GetQueryResults(0, 1, null)
.ContinueWith(t => (int)t.Result.TotalCount, TaskContinuationOptions.ExecuteSynchronously);
}
protected override Task<IList<Title>> GetPageAsyncOverride(int start, int pageSize, IList<SortDescription> sortDescriptions)
{
return GetQueryResults(start, pageSize, sortDescriptions)
.ContinueWith(t => (IList<Title>)((IEnumerable<Title>)t.Result).ToList(), TaskContinuationOptions.ExecuteSynchronously);
}
private Task<QueryOperationResponse<Title>> GetQueryResults(int start, int pageSize, IList<SortDescription> sortDescriptions)
{
// code to query the Netflix OData API
}
}
Nguồn
2012-08-13 09:31:00
Cập nhật: Kể từ khi chủ đề trở lại Tôi hiện đang điều tra các điều khiển của bên thứ ba. Infragistics "VirtualCollection" dường như xử lý điều này một cách tốt nhất và có thể bị ràng buộc với DomainServices - những thứ tốt đẹp –