6

Sử dụng mẫu Ứng dụng doanh nghiệp từ Dịch vụ RIA mới phát hành, bạn có thể thấy nhiều ví dụ sử dụng lưới dữ liệu ở trên cùng của DomainDataSource kết hợp với DataPager. Các thuộc tính PageSize và LoadSize có thể được sử dụng để điều chỉnh lượng dữ liệu được hiển thị trong một trang và dữ liệu được tìm nạp trước trong nền.Cách triển khai lưới dữ liệu Silverlight tải lười biếng mà không sử dụng phân trang

Bây giờ tôi muốn có một lưới dữ liệu với thanh cuộn và không có máy nhắn tin. Các cơ sở DomainDataSource chỉ nên tải dữ liệu được xử lý trong lưới. Nó sẽ kích hoạt tải khác, khi người dùng cuộn xuống các mục chưa có trong ngữ cảnh dữ liệu. Có bất kỳ triển khai mẫu nào không?

+0

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 –

Trả lời

1

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 
    } 
} 
+0

Có vẻ đầy hứa hẹn. Tôi chắc chắn sẽ kiểm tra nó. Trong khi đó, chúng tôi nghiêm chỉnh tinh chỉnh các nguồn từ infragistics để đạt được điều này ... –

1

Kiểm tra công việc mà Bea Stollnitz đã thực hiện trên blog của cô ấy. Mặc dù không phải là câu trả lời trực tiếp cho câu hỏi của bạn, cô ấy đã viết khá nhiều về giao diện người dùng và dữ liệu. Dưới đây là một liên kết từ blog của mình mà tôi nghĩ có thể giúp bạn bắt đầu: ảo hóa

dữ liệu: http://bea.stollnitz.com/blog/?p=344

HTH!
Chris

+0

Cảm ơn bạn Chris, cuối cùng tôi đã đọc nó ngày hôm qua. Bạn hoàn toàn đúng, nó không phải là câu trả lời trực tiếp nhưng chứa một số đề xuất tốt đẹp. –

+1

Liên kết đó bị hỏng, nhưng tôi cho rằng đây là nội dung tương tự từ Bea: http://www.zagstudio.com/blog/498#.UE8TT42PXQs – iggymoran