2011-07-05 18 views
0

で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> 

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

+0

何人について話していますか? Linqを使用してデータベースからデータを表示している場合は、linqが何をしているかを見てみましょう。おそらく、それぞれのレコードごとにデータベースを別々に打っています。 – hyp

+0

リストはツリービューにバインドされています。ツリービューは約6万項目から構成されています。スタイルをプロジェクトから除外すると、ロードに時間がかかりません。 –

+1

これは大変ですが、データベースからアイテムをどのように取得していますか?コードは良いでしょう。あなたがナビゲーションプロパティ "子"(またはそれに類するもの)でlinqを使用している場合、ノードを展開しているときには、おそらくデータベースに当たっています...約60k回 – hyp

答えて

2

ツリービューとパフォーマンスについてBea Stollnitzによって行われた投稿を見てみましょう。
関連する投稿は、次のようになります。

  • どのように私は、ツリービュー内の項目を展開することができますか? Part I/Part II/Part III
  • TreeViewのパフォーマンスを改善する手助けがありますか? Part I/Part II/Part III

彼女は詳細に説明する良い仕事をしていません、あなたは試すことができるすべてのオプション。あまりにも多くのコンテンツをここにすべて入れてください。

+0

[パートI](http://www.zagstudio.com/blog/475)/ [パートII](http://www.zagstudio.com/blog/477)/ [パートIII](http:// www.zagstudio.com/blog/480) – SuperOli

+2

これらのリンクはすべて今死んでいます。 :( –

2

あなたは(私はそれがどのクラスのみだと推測treeviewitemsをループしてそれが周りの仕事を試してみて、あなたのScanDirに追加し動作しない場合は

IsExpanded = true; 

を設定することで、「手動」にそれらを拡大しようとしたことがありあなたは展開しますか?)プロパティIsExpanded(または同様のもの)をテンプレートにバインドします。ソリューションの最高ではないが賢明な練習が、それはうまくいくならば...

+0

ありがとう。これは私のために非常にうまくいった! – Daro

関連する問題