每当我使用 TreeView 时,我总是只有几个节点,每个节点通常少于 100 个项目。我从来没有真正需要任何类型的 ui 虚拟化,但现在我第一次需要它。
当使用具有回收模式的 ui 虚拟化时出现问题,TreeView 似乎扩展了项目,即使我从未手动扩展它们。
我用谷歌搜索了这个问题,据我所知,TreeView 中的虚拟化回收模式可以重用容器。
所以我认为原因可能是将已经扩展的重用容器应用于以前未扩展的项目。
这是一个简单的例子:
https://github.com/devhedgehog/wpf/
对于那些由于某种原因而无法下载代码的人来说,这基本上就是我尝试用 TreeView 做的事情。
这就是我在 XAML 中所拥有的。
<Grid>
<TreeView ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Parts}">
<TextBlock Text="{Binding Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
这是后面的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
IList<Car> list = new List<Car>();
for (int i = 0; i < 5000; i ++)
{
list.Add(new Car() { Name = "test1" + i });
}
foreach (var car in list)
{
car.Parts = new List<string>();
for (int i = 0; i < 500; i++)
{
car.Parts.Add("asdf" + i);
}
}
this.DataContext = list;
}
}
public class Car
{
public string Name
{
get;
set;
}
public List<string> Parts
{
get;
set;
}
}
我希望有人可以为我提供解决此问题的方法。这是一个已知的错误?
如果它重复,我很抱歉。此外,我希望你们能告诉我我做错了什么,因为这是我在降级问题之前的第一篇文章。