2013-02-26 14 views
5

私はカスタムソートを実装したWPF Datagridを実装しています。私は、コレクションのレコードのいくつかをトップとボトム(トップロックとボトムロック)にロックする必要があります。だから、特定のレコードがトップロックされている場合は、選択したカラムの値に関係なく、コレクションの最初のレコードである必要があります(つまり、TopロックとBottomロックを並べ替える必要はありません)。ここに私のカスタムソート方法があります。 LineSorterたIComparer実装と私のカスタムソータークラスです一部のレコードがロックされたWPF DataGridカスタムソート

private void PerformLineCustomSort(DataGridColumn column) 
     { 
      ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; 
      column.SortDirection = direction; 
      ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(Lines); 

      LineSorter lineSort = new LineSorter(direction, column); 
      listCollectionView.CustomSort = lineSort; 

     } 

。これは正常に動作します。今度はListCollectionViewにトップロックとボトムロックを適用したいと思います。上記のコードを試してみましたが、変更はありません(リストはカスタムソート列のみに基づいてソートされています)。

listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending)); 
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending)); 

このシナリオを実行する方法はありますか、手動でロックしたレコードを削除して追加する必要がありますか。お勧めします..

+1

3つの異なるコレクションを作成し、結合することができます。1つのコレクションには上部ロックがあり、2つ目に下部ロックがあり、3つ目のコレクションにはすべての要素が残ります。 –

+3

あなたの 'LineSorter.Compare()'実装を変更して、トップロックされたアイテムを他のアイテムよりも少なく、ボトムロックされたアイテムを他のアイテムよりも大きく返すようにします。私はあなたがこれを行うことはできない理由があると仮定していますか? –

答えて

0

よく。あなたのコードからこれを行うことができます。

The page size   = 10 

Current page   = 2 

Collection name  = myItems 

First Item to display = initialItem 

Last Item to display = lastItem 

手順を想定してLet'a:

  • ソートコレクションを
  • あなたがいるので(コレクション から9〜16の項目(8項目)を取ります2ページ目)

初期項目数= 8×(現在のページ数-1)+ 1の最後の項目

数= 8×現在のページ番号

だから:

初期項目番号= 8×(2 - 1)+1 = 9

最後の項目番号= 8×2 = 16

(今あなたがソートされている8つの項目のサブコレクションを持っている)

  • サブコレクション

myItems.Insert(0、initialItem)の先頭にintialItemを追加します。

  • サブコレクション

    myItems.Insert(9、lastItem)の端部にlastItemを追加します。

関連する問題