2011-11-04 57 views
6

WPF中是否存在PagedCollectionView的實現?它存在於Silverlight中,但不在WPF中。分頁收藏在WPF中查看

如果沒有,最簡單的實現方法是什麼?

+0

可能的複製http://stackoverflow.com/questions/784726/how-can-i-paginate-a-wpf-datagrid –

回答

2

您可以簡單地從Silverlight one中獲取代碼並將其用於WPF項目中。

+0

對不起,我知道這是非常古老的,但我覺得我錯過了這裏的東西,似乎有一個整體一堆也需要的依賴關係移植? –

+0

已經很久了。我相信有一些依賴關係,但它們都非常本地化,易於複製。 –

+2

謝謝肯特,我發現這個鏈接,其中包含所需的一切: https://silverlight.svn.codeplex.com/svn/Release/Silverlight4/Source/System.Windows.Data/PagedCollectionView/爲任何其他人發現這一點。 –

0

或者僅使用的CollectionView類和「雙過濾器」您的收藏

解決方案在這裏找到:Own CollectionView for paging, sorting and filtering

我粘貼一小段代碼片段在這裏爲您舒適:

 // 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

爲什麼你會打擾回答一個真正的老問題,有一個選定的答案? – Edward