我知道如何擴大從一個TreeView的所有節點:展開TreeViewItems在WPF快速
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="TreeViewItem.IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
唯一的問題是,它需要大約一分鐘展開所有節點...這可能是因爲有這麼多項目。我怎麼能加快這個過程?
編輯:
所以我有一個列表:List<ScanItems> MyFilesList
ScanItem
是具有如屬性的類:真實姓名,名稱,大小,dateCreated會,ComparePath和我需要其他特定屬性這就是爲什麼我沒有使用FileInfo類。
ScanFile
是繼承自ScanItems的類,因此它與添加其他自定義屬性一樣。
ScanDir
是另一個類,從ScanItem也繼承了它具有以下屬性:
public List<ScanItem> items{get;set;}
爲什麼我已經包括財產,這樣我可以有另一個列表withing一個項目的原因。
查看this question關於如何從文件列表填充樹視圖。
所以現在我希望我正確地解釋我的自我如何將該列表綁定到樹視圖。
現在讓我解釋一下如何將文件添加到MyFilesList。我創建了一個遞歸方法來查找目錄中的文件。如果該curent目錄包含一個文件,然後添加一個ScanFile項目。如果它包含一個文件夾,然後添加一個ScanDir對象並再次調用相同的方法傳遞ScanDir列表。所以這個過程大約需要8秒鐘來掃描我的外部硬盤。在執行該方法後,我的列表可能只包含4個項目,但其中一個項目將包含可能包含20個項目的列表等等,就像文件夾可能包含5個項目,並且如果其中一個項目碰巧是文件夾可以有額外的項目。
所以,當我執行TreeView.DataContext = MyFilesList樹視圖被填充不到一秒鐘。但是,當我包括:
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="TreeViewItem.IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
該樹型內樹視圖風格需要長時間加載。
我們有多少人在談論?如果你使用Linq顯示來自數據庫的數據,那麼可能看看你的linq在做什麼 - 也許你是分別單擊每條記錄的數據庫。 – hyp
列表綁定到樹視圖。樹視圖由大約60,000個項目組成。當我從項目中排除樣式時,不需要花時間加載。 –
所以這是很多,但你如何從數據庫檢索項目?代碼會很好。如果你正在使用導航屬性「Child」(或類似的)的linq,那麼當你展開一個節點時,最有可能的是你碰到數據庫了...大約60k次 – hyp