2011-11-04 18 views
6

Có thực hiện PagedCollectionView trong WPF xung quanh không? Nó tồn tại trong Silverlight nhưng không có trong WPF.Bộ sưu tập theo trang Xem trong WPF

Nếu không có, cách đơn giản nhất để thực hiện điều này là gì?

+0

có thể trùng lặp http://stackoverflow.com/questions/784726/how-can-i-paginate-a-wpf-datagrid –

Trả lời

2

Bạn chỉ cần lấy mã từ Silverlight one và sử dụng mã đó trong dự án WPF của mình.

+0

Xin lỗi tôi biết điều này thực sự cũ nhưng tôi cảm thấy tôi đang thiếu một cái gì đó ở đây, có vẻ như là toàn bộ một loạt các phụ thuộc cũng cần porting? –

+0

Đã lâu rồi. Tôi tin rằng có một số phụ thuộc, nhưng tất cả chúng đều được bản địa hóa và dễ dàng sao chép. –

+2

Cảm ơn Kent, tôi đã tìm thấy liên kết này chứa mọi thứ bắt buộc: https://silverlight.svn.codeplex.com/svn/Release/Silverlight4/Source/System.Windows.Data/PagedCollectionView/ cho bất kỳ ai khác tìm thấy điều này. –

0

Hoặc chỉ sử dụng các lớp CollectionView và "bộ lọc kép" bộ sưu tập của bạn

giải pháp tìm thấy ở đây: Own CollectionView for paging, sorting and filtering

Tôi đã dán mã snipet đây cho convinience của bạn:

 // obtenir la CollectionView 
     ICollectionView cvCollectionView = CollectionViewSource.GetDefaultView(this.Suivis); 
     if (cvCollectionView == null) 
      return; 

     // filtrer ... exemple pour tests DI-2015-05105-0 
     cvCollectionView.Filter = p_oObject => { return true; /* use your own filter */ }; 

     // page configuration 
     int iMaxItemPerPage = 2; 
     int iCurrentPage = 0; 
     int iStartIndex = iCurrentPage * iMaxItemPerPage; 

     // déterminer les objects "de la page" 
     int iCurrentIndex = 0; 
     HashSet<object> hsObjectsInPage = new HashSet<object>(); 
     foreach (object oObject in cvCollectionView) 
     { 
      // break if MaxItemCount is reached 
      if (hsObjectsInPage.Count > iMaxItemPerPage) 
       break; 

      // add if StartIndex is reached 
      if (iCurrentIndex >= iStartIndex) 
       hsObjectsInPage.Add(oObject); 

      // increment 
      iCurrentIndex++; 
     } 

     // refilter 
     cvCollectionView.Filter = p_oObject => 
     { 
      return hsObjectsInPage.Contains(p_oObject); 
     }; 
+0

Tại sao bạn phải trả lời một câu hỏi thực sự cũ có câu trả lời đã chọn? – Edward