問題タブ [data-virtualization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - データの仮想化と SelectionMode の拡張
IList と IList を実装する ItemsSource にバインドする ListBox がありますが、仮想化されていない IList にバインドする場合と比較して、SelectionMode=Extended の動作は期待したものではないようです。
IList の動作:
VirtualizedCollection:IList、IList 動作:
ブラックボックスに近い?メソッドは、2 番目のケースでは 1 を返しますが、最初のケースでは実際の行 10 を取得する、ある種の「現在選択されている行を取得」を呼び出しています。
特異性が役立つ場合、Paul McClean による WPF データ仮想化は、私が使用している virtualizedcollection 実装です。バインド時に可視化されたコレクションが使用される場合、彼のソース コードにも同じバグがあります。
c# - 大きなフォーマットのテーブルをC#WPFでレンダリングする
私は現在、比較レポートを実行するテーブルを生成するC#WPFアプリケーションを実行しています。テーブルは大きく、背景、前景などがフォーマットされています。
FlowDocument内でTableを使用しようとしましたが、処理が遅く、スクロールすることはほとんど不可能です。この問題を解決する方法はありますか?
データの仮想化を見てきましたが、FlowDocumentのテーブルに関連するものが見つかりませんでした。参考までに、FlowDocumentは、多数のフォーマットされた行を持つ大きなテーブルで構成されており、を使用して形成されますXamlReader.Load()
。
パフォーマンスを最適化するための提案を歓迎します。
wpf - WPFリストボックスでのデータの仮想化
リストボックスに1000個のアイテムを入力するシナリオがあります。ItemsSource
データのソースを使用してプロパティを設定しました。
UIが読み込まれるときに、特定の基準に基づいてリストボックスの項目を削除する必要があるという要件があります。アタッチされたプロパティのコールバックメソッドでの設定ContentTemplate
によって同じことを実現するために、スタイルとアタッチされたプロパティを使用しています。ListBoxItem
私の問題は、リストの最後にあるアイテムに対してListBoxItem
usingを生成しようとすると、nullになることです。ItemContainerGenerator.ContainerFromItem
その結果、リストの一番下にあるリストボックスの項目を削除できません。
仮想化と関係がありますか。ListBoxItems
負荷のあるものをすべて入手したい。
回避策はありますか?
ありがとう
wpf - データ仮想化による DataGrid 行リクエスト パターン
CodePlexと、Bea Stollnitzのブログと Vincent Da Ven Berhge の論文 (同じリンク)からのいくつかのアイデアを使用して、データ仮想化ソリューションを実装しました。ただし、別のアプローチが必要だったので、独自のソリューションを作成することにしました。
DataGrid
このソリューションで約100万行を表示するために使用しています。UI仮想化も使用しています。DataGrid
私の解決策は実行可能ですが、特定の状況でソースからデータを要求する方法に関する奇妙な動作が発生します。
解決策について
私はすべての重い仕事をするリストを書くことになりました。It という名前の汎用クラスでありVirtualList<T>.
、インターフェイスを実装しているICollectionViewFactory
ため、コレクション ビュー作成メカニズムはVirtualListCollectionView<T>
それをラップするインスタンスを作成できます。このクラスは から継承されListCollectionView
ます。私は提案に従って、独自のICollectionView
実装を作成しませんでした。継承もうまくいくようです。
はVirtualList<T>
、データ全体をページに分割します。項目の合計数を取得し、リスト インデクサーを介して行を要求するたびにDataGrid
、適切なページを読み込むか、キャッシュから返します。ページは内部でリサイクルされ、DispatcherTimer
未使用のページはアイドル時間に破棄されます。
データ リクエストのパターン
私が最初に学んだことは、
VirtualList<T>
実装する必要がありますIList
(一般的ではありません)。それ以外の場合、ItemsControl
はそれを として扱い、IEnumerable
すべての行をクエリ/列挙します。DataGrid
はタイプセーフではないため、これは論理的であり、IList<T>
インターフェイスを使用できません。インデックスが 0 の行は、 から頻繁に尋ねられます
DataGrid
。ビジュアルアイテムの計測に使われているようです(コールスタックによると)。したがって、これをキャッシュするだけです。内部のキャッシング メカニズム
DataGrid
は、予測可能なパターンを使用して、表示される行をクエリします。最初に、上から下に表示されている行を要求し (行ごとに 2 回)、次に、表示されている領域 (最初の表示されている行を含む) の前にあるいくつかの行 (表示されている領域のサイズに応じて) を降順でクエリします。下から上に並べます。その後、表示されている行 (最後に表示されている行を含む) の後、上から下まで同じ量の行を要求します。表示される行インデックスが 4,5,6 の場合。データ要求は次のようになります: 4,4,5,5,6,6,4,3,2,1,6,7,8,9.
ページ サイズが適切に設定されていれば、現在および以前に読み込まれたページからこれらすべてのリクエストを処理できます。
CanSelectMultipleItems
でTrue
あり、ユーザーが SHIFT ボタンまたはマウス ドラッグを使用して複数の項目を選択するとDataGrid
、リストの先頭から選択範囲の末尾までのすべての行が列挙されます。この列挙は、実装されIEnumerable
ているかどうかに関係なく、インターフェイスを介して行われます。IList
選択された行が表示されず、現在の表示領域が選択された行から「遠い」場合、選択された行から表示領域の最後まで、DataGrid がすべての項目の要求を開始することがあります。間にあるすべての行を含めて、表示さえされていません。この動作の正確なパターンを理解できませんでした。たぶん私の実装がその理由です。
私の質問
DataGrid
非表示の行が表示されると再度要求されるので、なぜ非表示の行を要求するのですか?すべての行を 2 回または 3 回要求する必要があるのはなぜですか?
IEnumerable
複数の項目の選択をオフにする以外に、DataGrid を使用しないようにする方法を教えてもらえますか?
javascript - d3.jsjson構造体はデータを追加します
ラベルと値の2つの単純な値を使用して円グラフを描画しています。これは私のjsonです:
}
それが最良の構造であるかどうかはわかりません。実際、d3.jsではデータ値を呼び出すことができません。これは私のコードです:
助言がありますか?
wpf - データ仮想化で複数選択をシフトするときの DataGrid リクエスト
残念ながら何の回答も得られなかった 4 か月前の投稿を追加します。
シフトを使用してデータグリッドで複数選択を使用する場合、基本的に同じ問題の前に立っています。
巨大なリスト (グリッド内に 1,000,000 項目があり、すべてのデータが仮想化されているとします) のどこかにいて、Shift + マウス クリックを使用して 500,000 から 500,050 を選択すると、グリッドは私の "GetEnumerator()" メソッドを呼び出します。仮想リスト (Vincent と Paul のものと同様の実装)。私が今まで行っていたのは、キャッシュされたページに対する SelectMany だけでした。しかし残念なことに、行が適切に選択されませんでした (ctrl + マウス クリックでうまくいきます!)。
だから私が見つけたのは、DataGridが実際にはインデックス0から選択の最後までのすべてのアイテムを期待していることです。これは明らかに、1m アイテムのリストには理想的ではありません。これは、0 から (私の例では) 500,050 までのすべてのアイテムのリクエストが発生し、データベースからすべてをロードするためです。
したがって、私の質問は、上記のリンク先のダニエルの質問と同じです。
DataGrid が項目を複数回要求するのはなぜですか (選択した項目は、明らかな理由もなく連続して 6 ~ 7 回要求されます)。
Enumerator を使用しないように DataGrid に指示し、選択した項目だけを取得して 0 から繰り返し処理しないようにする方法はありますか?
データの仮想化に関してはあまり発見されていないため、少なくとも示唆に富む回答を得ることができれば幸いです。
windows-phone-7 - リストボックスの最後までスクロールしていることを検出しています
アイテムのリストがたくさんあるので、サーバーに対応するページをリクエストする必要があります。ユーザーがリストボックスの最後までスクロールしたときにイベントをキャッチして、別のページをリクエストできるようにするにはどうすればよいですか?
c# - データ仮想化とユーザー同時実行
データ仮想化を使用する場合にマルチユーザー シナリオで発生する可能性のある多くの問題を解決する方法について、ポインターや例はありますか? WPF と DataGrid について話しているとしましょう。オンデマンドでロードされる仮想化されたコレクションを実装することは、それほど難しくありません。ただし、元のクエリの一時的な結果が格納されるステージング領域がないと、次のような同時実行の問題が発生します。
- 新しいページをロードすると、誤ったデータがフェッチされる可能性があります (同時ユーザーがいくつかのレコードを追加および削除すると、レコードの合計数は同じになりますが、その結果、グリッドの上部のどこかに既に表示されている重複したエントリをページでフェッチすることになります)
- 新しいページをスクロールしてロードするときにグリッドでユーザーの選択を保持します。これにより、選択したアイテムがキャッシュから期限切れになり、再ロードされると、誰かがそれらを削除したことがわかります。すべての選択を解除してユーザーにメッセージを表示することもできますが、:/ また、Shift キーを押しながらクリック (複数選択) してリストの最後に近い場所を選択した場合、リストの中央にいくつかの項目が「表示」されたときにどうすればよいでしょうかいくつかの中間ページ (同時ユーザーが追加したアイテム) のロード時。
wpf - ListBox の読み込み時間を計測する方法 WPF
私は DataVirtualization と Async をいじっています。仮想化されたデータ コレクションをバインドしている ListBox の読み込み時間を定量化するためのオプションは何ですか?
仮想化されたデータと仮想化されていないデータの読み込みを比較する方法が必要です。このトピックに関するリソースを見つけることができませんでした。
コード ビハインドの ListBox_Loaded イベントにストップウォッチを配置する必要がありますか?
前もって感謝します!