1

ツリービューからすべてのノードを展開する方法を知っています。

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>

唯一の問題は、すべてのノードを拡張するのに約1分かかることです...これはおそらくアイテムが非常に多いためです。このプロセスをどのようにスピードアップできますか?


編集:

だから私はリストを持っています: List<ScanItems> MyFilesList

ScanItemは、FullName、Name、Size、DateCreated、ComparePathなどのプロパティと、必要なその他の特定のプロパティを持つクラスです。そのため、FileInfoクラスを使用しませんでした。

ScanFileScanItemsから継承するクラスであるため、他のカスタムプロパティが追加されたものと同じです。

ScanDirScanItemからも継承する別のクラスであり、次のプロパティがあります。

public List<ScanItem> items{get;set;}  

そのプロパティを含めた理由は、アイテムを含む別のリストを作成できるようにするためです。

ファイルのリストからツリービューにデータを入力する方法については、この質問を参照してください。

だから今、私はそのリストをツリービューにバインドする方法について自分自身を正しく説明したいと思います。

次に、ファイルをMyFilesListに追加する方法について説明します。ディレクトリ内のファイルを検索する再帰メソッドを作成しました。現在のディレクトリにファイルが含まれている場合は、ScanFileアイテムを追加します。フォルダが含まれている場合は、ScanDirオブジェクトを追加し、同じメソッドを再度呼び出して、ScanDirのリストを渡します。したがって、このプロセスは外付けハードドライブをスキャンするのに約8秒かかります。そのメソッドが実行された後、私のリストには4つのアイテムしか含まれない可能性がありますが、フォルダに5つのアイテムがあり、それらの5つのアイテムの1つがたまたまそのフォルダである場合と同様に、それらのアイテムの1つにはおそらく20のアイテムのリストが含まれます。追加のアイテムを持つことができます。

したがって、TreeView.DataContext = MyFilesListを実行すると、ツリービューに1秒未満でデータが入力されます。しかし、私が含めるとき:

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>

ツリービュー内のそのスタイルは、ツリービューのロードに時間がかかります。

4

2 に答える 2

3

ツリービューとパフォーマンスについてのBeaStollnitzによる投稿をご覧ください。
関連する投稿は次のとおりです。

彼女はあなたが試すことができるすべてのオプションを詳細に説明する良い仕事をしています。すべてをここに置くにはコンテンツが多すぎます。

于 2011-07-08T07:25:12.387 に答える
2

ツリービューアイテムをループして、設定して「手動で」展開しようとしましたか

IsExpanded = true;

それがうまくいかない場合は、回避策を試してScanDir、プロパティIsExpanded(または同様のクラス) を追加し、テンプレートでバインドします。最善の解決策は賢明ではありませんが、うまくいく場合は...

于 2011-07-08T07:08:49.620 に答える