でTreeViewItemsを展開します。は私がツリービューからすべてのノードを展開する方法を知っているWPF速く
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="TreeViewItem.IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
唯一の問題は、それが非常に多くあるので、それはおそらくです...すべてのノードを展開する分程度かかることですアイテム。どうすればこのプロセスをスピードアップできますか?
編集:
だから私はリストを持っている:フルネーム、名前、サイズ、DateCreated、ComparePathと私が必要とする他の特定のプロパティ:List<ScanItems> MyFilesList
ScanItem
は、次のような性質を持つクラスでありますそのため私はFileInfoクラスを使用しませんでした。
ScanFile
は、それが他のカスタムプロパティを追加しただけのことのようですのでScanItemsから継承するクラスです。
ScanDir
ScanItemからも継承し、次のプロパティを持つ別のクラスである:
public List<ScanItem> items{get;set;}
私はアイテムをwithing別のリストを持つことができるように、プロパティがあることが含まれている理由。
は、ファイルのリストからツリービューを移入する方法についてthis questionを見てください。
今私は私がツリービューにそのリストを結合していますどのように正しく私の自己を説明したいと考えています。
今、私はMyFilesListにファイルを追加する方法を説明してみましょう。ディレクトリ内のファイルを探す再帰メソッドを作成しました。 curentディレクトリにファイルが含まれている場合は、ScanFile項目を追加します。フォルダが含まれている場合は、ScanDirオブジェクトを追加し、ScanDirのリストを再度渡して同じメソッドを呼び出します。このプロセスでは、外付けハードドライブをスキャンするのに約8秒かかります。そのメソッドが実行された後、私のリストには4つのアイテムしか含まれないかもしれませんが、それらのアイテムの1つに多分20個のアイテムのリストが含まれていて、そうするとフォルダのように5個のアイテムがあり、追加項目を持つことができます。
Iが実行ときにTreeView.DataContext = MyFilesListツリービューは1秒未満で取り込まれます。しかし、私は含まれて:
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="TreeViewItem.IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
そのスタイルは、ツリービュー内のツリービューは、ロードに時間がかかる。
何人について話していますか? Linqを使用してデータベースからデータを表示している場合は、linqが何をしているかを見てみましょう。おそらく、それぞれのレコードごとにデータベースを別々に打っています。 – hyp
リストはツリービューにバインドされています。ツリービューは約6万項目から構成されています。スタイルをプロジェクトから除外すると、ロードに時間がかかりません。 –
これは大変ですが、データベースからアイテムをどのように取得していますか?コードは良いでしょう。あなたがナビゲーションプロパティ "子"(またはそれに類するもの)でlinqを使用している場合、ノードを展開しているときには、おそらくデータベースに当たっています...約60k回 – hyp