ページリストボックス内のコレクションの並べ替えとフィルタリング

ジュリアン

10,000個のアイテムを含むデータベースがあり、アプリの実行中に追加および削除できます。

最大100個のアイテムを表示し、ページングをサポートするListBoxがあります。

10,000個のアイテムをフィルタリングして並べ替えることができます。これは、リストボックスにすぐに反映する必要があります。

フィルタを通過する限り、アイテムをランダムに選択するボタンがあります。

この種の操作に使用するのに最適なコレクション/ビューのセットは何ですか?

これまでのところ、私の最初のステップはObservableCollection、を呼び出すデータベース内のすべてのアイテムのを作成することMainOCです。

次に、これをList解析しMainOC、フィルターに一致するすべてのアイテムのを作成しますFilteredList

次にListCollectionView、上記に基づいListて、最初の100個のアイテムを保持するベースを作成します。

短所:

  • ListCollectionViewソート操作が適用されるたびに再作成する必要があります。
  • ListCollectionViewページを作成するたびに再作成する必要があります。
  • ListCollectionViewフィルタが変更されるたびに再作成する必要があります。
  • ListCollectionViewアイテムがに追加または削除されるたびに再作成する必要がありますMainOC

私が見逃しているより良いアプローチはありますか?

たとえば、にフィルタを適用できることがわかりましたListCollectionViewListCollectionView10,000個すべてのアイテムを入力する必要がありますか?しかし、ListBox表示するアイテムの数を制限するにはどうすればよいですか?

データベースに対して直接フィルタリングと並べ替えを行う必要がありますか?FilteredListデータベースから直接構築ListCollectionViewし、それに基づいて作成することもできますが、これには上記のすべての短所があります。

あなたが提供できる入力を探しています!

ローランドフェザント

これは、DynamicDataを使用して簡単に解決できる問題です動的データはrxに基づいているため、すばらしいRxに慣れていない場合は、学習を開始することをお勧めします。かなりの学習曲線がありますが、報酬は莫大です。

とにかく私の答えに戻ると、動的データの開始点は、次のようにキーで構築されたキャッシュにデータを取得することです

var myCache = new SourceCache<MyObject, MyId>(myobject=>myobject.Id)

明らかにキャッシュであるため、追加、更新、削除する方法があるので、ここではそれらを示しません。

動的データは、データを動的に問い合わせるための拡張機能といくつかのコントローラーの負荷を提供します。ページングの場合、この問題を解決するためにいくつかの要素が必要です

//this is an extension of observable collection optimised for dynamic data
var collection = new ObservableCollectionExtended<MyObject>();
//these controllers enable dynamically changing filter, sort and page
var pageController = new PageController();  
var filterController = new FilterController<T>(); 
var sortController = new SortController<T>(); 

これらのコントローラーを使用してデータのストリームを作成し、このように結果をコレクションにバインドします。

var mySubscription = myCache.Connect()
    .Filter(filterController)
    .Sort(sortController)
    .Page(pageController)
    .ObserveOnDispatcher() //ensure we are on the UI thread
    .Bind(collection)
    .Subscribe() //nothing happens until we subscribe.  

コントローラーのパラメーターをいつでも変更して、次のようにデータをフィルター処理、並べ替え、ページング、およびバインドできます。

//to change page
pageController.Change(new PageRequest(1,100));
//to change filter 
filterController.Change(myobject=> //return a predicate);
//to change sort
sortController .Change( //return an IComparable<>);

そして、まるで魔法のように、コントローラーパラメーターのいずれかが変更されたとき、またはデータのいずれかが変更されたときに、監視可能なコレクションは自己維持します。

ここで考慮しなければならないのは、データベースデータをキャッシュにロードするために必要なコードだけです。

近い将来、この機能の実用的な例を作成します。

動的データの詳細については、を参照してください。

Githubの動的データ

Wpfデモアプリ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リストの並べ替えとフィルタリング

分類Dev

リストの並べ替えとフィルタリング

分類Dev

並べ替えとオブジェクトのフィルタリングリスト

分類Dev

コレクションの並べ替え-大きなリストのバグ

分類Dev

バックボーンマリオネットの並べ替え可能、フィルタリング可能、ユーザーリスト?

分類Dev

ngtable:ネストされたオブジェクトの並べ替えとフィルタリング

分類Dev

MongoDB:MongoDB埋め込みコレクションの取得、フィルタリング、並べ替え

分類Dev

ストリームAPIの頻度で並べ替えコレクション

分類Dev

mongoDBコレクション内のドキュメントの複数のフィールドのクエリ、投影、および並べ替え

分類Dev

関連するコレクションの属性でフィルタリングされた関連するコレクションの数でコレクション(トップ20など)を並べ替える方法は?

分類Dev

フィルタリングされたリストボックスを並べ替える方法

分類Dev

列の並べ替えと上位の結果のフィルタリング、マルチインデックスレベル0(シリーズ/データフレーム)によるグループ化

分類Dev

リレーショナルテーブルデータのページ、並べ替え、フィルタリング

分類Dev

リンクリストのアルファベット順の並べ替え、cのセグメンテーション違反

分類Dev

ページング可能なカスタムJPAクエリの並べ替え

分類Dev

ページング可能なカスタムJPAクエリの並べ替え

分類Dev

Spring-JPAディスクリミネーターフィールドでのデータページング可能な並べ替え

分類Dev

Googleスプレッドシートの列で同時に並べ替えとフィルタリングを行うより簡単な方法

分類Dev

フィルタリングされたオブジェクトをangularjsのドロップダウンオプションで並べ替える方法

分類Dev

クライアント側のwebdatagridでフィルタリング、並べ替え、ページングをクリアする方法は?

分類Dev

カスケードコンボボックスクエリの並べ替え

分類Dev

トラック数で並べ替えまたはフィルタリングできる音楽プレーヤー(アーティストごと)

分類Dev

トラック数で並べ替えまたはフィルタリングできる音楽プレーヤー(アーティストごと)

分類Dev

深いレベルのクラス/エンティティで linq by フィールドを使用してコレクションごとに並べ替える

分類Dev

レスポンシブフレックスボックスとサブチャイルドの並べ替え

分類Dev

データがストアドプロシージャからのものであるdatagridviewでの並べ替えとフィルタリング

分類Dev

ArrayListの並べ替え、アプリケーションがスタック

分類Dev

アプリスクリプトにリンクされたボタンでスプレッドシートの範囲を並べ替える

分類Dev

Laravelアプリケーション共有ホスティング、ストレージフォルダーのシンボリックリンクの問題

Related 関連記事

  1. 1

    リストの並べ替えとフィルタリング

  2. 2

    リストの並べ替えとフィルタリング

  3. 3

    並べ替えとオブジェクトのフィルタリングリスト

  4. 4

    コレクションの並べ替え-大きなリストのバグ

  5. 5

    バックボーンマリオネットの並べ替え可能、フィルタリング可能、ユーザーリスト?

  6. 6

    ngtable:ネストされたオブジェクトの並べ替えとフィルタリング

  7. 7

    MongoDB:MongoDB埋め込みコレクションの取得、フィルタリング、並べ替え

  8. 8

    ストリームAPIの頻度で並べ替えコレクション

  9. 9

    mongoDBコレクション内のドキュメントの複数のフィールドのクエリ、投影、および並べ替え

  10. 10

    関連するコレクションの属性でフィルタリングされた関連するコレクションの数でコレクション(トップ20など)を並べ替える方法は?

  11. 11

    フィルタリングされたリストボックスを並べ替える方法

  12. 12

    列の並べ替えと上位の結果のフィルタリング、マルチインデックスレベル0(シリーズ/データフレーム)によるグループ化

  13. 13

    リレーショナルテーブルデータのページ、並べ替え、フィルタリング

  14. 14

    リンクリストのアルファベット順の並べ替え、cのセグメンテーション違反

  15. 15

    ページング可能なカスタムJPAクエリの並べ替え

  16. 16

    ページング可能なカスタムJPAクエリの並べ替え

  17. 17

    Spring-JPAディスクリミネーターフィールドでのデータページング可能な並べ替え

  18. 18

    Googleスプレッドシートの列で同時に並べ替えとフィルタリングを行うより簡単な方法

  19. 19

    フィルタリングされたオブジェクトをangularjsのドロップダウンオプションで並べ替える方法

  20. 20

    クライアント側のwebdatagridでフィルタリング、並べ替え、ページングをクリアする方法は?

  21. 21

    カスケードコンボボックスクエリの並べ替え

  22. 22

    トラック数で並べ替えまたはフィルタリングできる音楽プレーヤー(アーティストごと)

  23. 23

    トラック数で並べ替えまたはフィルタリングできる音楽プレーヤー(アーティストごと)

  24. 24

    深いレベルのクラス/エンティティで linq by フィールドを使用してコレクションごとに並べ替える

  25. 25

    レスポンシブフレックスボックスとサブチャイルドの並べ替え

  26. 26

    データがストアドプロシージャからのものであるdatagridviewでの並べ替えとフィルタリング

  27. 27

    ArrayListの並べ替え、アプリケーションがスタック

  28. 28

    アプリスクリプトにリンクされたボタンでスプレッドシートの範囲を並べ替える

  29. 29

    Laravelアプリケーション共有ホスティング、ストレージフォルダーのシンボリックリンクの問題

ホットタグ

アーカイブ