當 TreeView 中的一個節點包含很多元素時,比如 2000 以上,它的展開和折疊都很慢。對于 ListView,我使用的是增量加載:
<ListView
Width="500"
MaxHeight="400"
IsItemClickEnabled = "False"
SelectionMode ="None"
IncrementalLoadingThreshold="5"
IncrementalLoadingTrigger="Edge"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollMode="Enabled"/>
但是,我沒有看到 TreeView 的此類選項。如何優化?
uj5u.com熱心網友回復:
緩慢展開和折疊 TreeView 節點
兩者都不包含 IncrementalLoading 行為,因此您不能為樹視圖進行增量加載TreeView。TreeViewItem但是您可以使用 linq select-take 方法處理資料源以實作增量加載功能。
在用于加載更多專案的最后一個 TreeViewItem 中放置一個按鈕。
例如
<DataTemplate x:Key="FileTemplate" x:DataType="local:ExplorerItem">
<TreeViewItem AutomationProperties.Name="{x:Bind Name}" IsSelected="{x:Bind IsSelected,Mode=TwoWay}">
<StackPanel Orientation="Horizontal">
<Image Width="20" Source="../Assets/file.png" />
<TextBlock Margin="0,0,10,0" />
<TextBlock Text="{x:Bind Name}" />
<Button Background="White" Margin="15,0,0,0" x:Name="LoadMore" Visibility="{Binding IsLastItem}"
Command="{Binding LoadMoreCommand}" CommandParameter="{Binding}">
<SymbolIcon Symbol="More"/>
</Button>
</StackPanel>
</TreeViewItem>
</DataTemplate>
代碼背后
WeakReferenceMessenger.Default.Register<object>(this, (s, e) =>
{
var temp = subitems.Skip(subitems.IndexOf(e as ExplorerItem) 1).Take(20);
(e as ExplorerItem).IsLastItem = false;
foreach (var item in temp)
{
folder1.Children.Add(item);
}
folder1.Children.Last().IsLastItem = true;
});

完整代碼請參考此鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506322.html
