10

TL;DR

Thomas Schindlの記事JFace-Viewer and Eclipse Databinding with > 10.000 ObjectsTreeViewer (これは非常に良い考えです) に基づいて、通常の+ 複数のITreeContentProvider実装を、 、a、およびEclipse Data Bindingを使用するNebulaGridTreeViewerに変換して作成したいと思います。 "lazy" (レイジー) で、オンデマンドでデータをロードしますObservableListTreeContentProviderVisibleRangeChangedListener

ITreeContentProviderで同じ階層を使用するには、既存の通常の実装をどのように書き直すべきObservableListTreeContentProviderですか? 古いソリューションと新しいソリューションの間に「架け橋」を作ることはできますか? DelegatingListPropertyどういうわけかこのように使用しますか?他のアイデアはありますか?
単純すぎる例をいくつか見つけましたが、このような複雑な階層ツリー形式でデータ バインディングを使用するという概念がよくわかりません。

ツリーとコンテンツ プロバイダの例:

コンテンツ プロバイダ 1.:

|- A1
   |-- B1
       |-- MyMessage1
|- A2
   |-- B2
       |-- MyMessage2

コンテンツ プロバイダー 2.:

|- C1
   |-- D1
       |-- MyMessage1
|- C2
   |-- D2
       |-- MyMessage2

長い説明

従来の実装と+実装のカスタムを使用して、膨大な量のオブジェクトを階層ツリー形式で表示するビューがあります。この階層を表示する形式をユーザーが選択できるメニューもあります。ユーザーが別の表示形式を選択すると、別の実装がビューアーに設定され、プログラムによってビューアーが更新されるだけです。 動作しますが、膨大な数の要素 (場合によっては 100 ~ 200k 行、理由は聞かないでください。動作する必要があるだけです) のため、アイテムの表示が遅くなる可能性があります。TreeViewerITreeContentProviderLabelProviderITableLabelProviderITreeContentProvider
、TreeItems に非常に多くのリスナーがあり、ビューの更新に時間がかかるなどの理由で、UI がフリーズすることがあります。

そのため、モデル要素が既にメモリに読み込まれている間に、ある種の怠惰なソリューションを使用したいと思います。
私はすでに と を試しましSWT.VIRTUALILazyTreeContentProviderが、パフォーマンスが悪く ( を使用していてもviewer.setUseHashlookup(true))、問題がありました (スクロール時に、TreeItems の読み込みに時間がかかり、バグ、並べ替え、フィルタリングなどの問題がありました)。

Thomas Schindl のブログ記事: JFace-Viewer and Eclipse Databinding with > 10.000 Objectsを読みました。Eclipse Nebula GridGridTreeViewerand + ObservableListTreeContentProvider(これもITreeContentProvider実装です) とVisibleRangeChangedListener"lazy" ラベル プロバイダー (記事のように)を使用して、これを試してみたいと思います。どうにか既存のITreeContentProvider実装を使用して、これと新しいの間に「ブリッジ」を構築できObservableListTreeContentProviderますか?


ところで、私はNebula NatTableをチェックしましたが、既存のコンテンツ プロバイダーをこの新しいソリューションに移行するのは非常に難しいことがわかりました。その API とそのアプローチはまったく異なります (階層は子から親へ、逆ではありません)。はまだ空です。

4

1 に答える 1