私は WPF アーキテクチャとして MVVM を使用しており、WPF TreeView を遅延読み込みとして実装しています (展開するまで、子項目は再帰的に読み込まれません)。
ただし、展開時に非同期読み込みも実装する必要があります。それを行う方法はありますか?これをコード ビハインド/アプリケーション レベルではなく、コントロール レベルで維持する必要があります。
ありがとう
私は WPF アーキテクチャとして MVVM を使用しており、WPF TreeView を遅延読み込みとして実装しています (展開するまで、子項目は再帰的に読み込まれません)。
ただし、展開時に非同期読み込みも実装する必要があります。それを行う方法はありますか?これをコード ビハインド/アプリケーション レベルではなく、コントロール レベルで維持する必要があります。
ありがとう
コントロール自体にこれを実装する必要があるのはなぜですか?
それが絶対的な要件ではないと仮定すると、指定されたノードの子を返すプロパティでこれを処理します。子がまだ設定されていない場合は、バックグラウンド スレッドを使用して子を読み込み、見つかったときに UI スレッドに通知してから、子オブジェクトを子のコレクションに追加します。ObservableCollection
(または少なくとも を実装するコレクション)を使用していると仮定するとINotifyCollectionChanged
、子が追加されると、非同期で UI に表示されます。
これを行う方法は次のとおりです。
これにより、TreeViewItemが展開されるまでItemsSourceが設定されるのを防ぎます。このメカニズムの作成は多少の作業ですが、作成したら、HierarchicalDataTemplateからItemsSourceを削除し、代わりにItemContainerStyleに設定するだけで、TreeViewの遅延ロードを行うことができます。
遅延読み込みと HierarchicalDataTemplates を使用すると、読み込みを選択したアイテムのみが取得されます。TreeView は、展開/折りたたみの切り替えボタンを表示するかどうかを決定するために、表示されているものの 1 つ下のレベルを読み込む必要があることに注意してください。
ロードの遅延が必要なすべての UI 要素に対して、「View GUID」を使用しました。
例による説明: