问题是相对于DataGrid。
我在MySQL数据库中有一个表。它有大约20列,存储大约32,000条记录。
所以我通常使用DataGrid在我的测试应用程序中加载它们,它通常需要两秒或更短的时间来填充所有信息而不会延迟加载。 (EF 6)
所以我真的只需要一个列并决定使用ListView。事情是我只在非常小的桌子上使用它,所以滞后甚至不值得一提。与TreeView一样。
令我感到困惑的是DataGrid几乎可以无缝地处理所有这些信息,而ListBox似乎觉得需要使用箭头键在每次更改选项时重新加载内容。它真的只加载一列。
一旦UserControl初始化,加载需要很长时间,我想我可能没有正确优化我的代码。也许两者的对待方式不同?
这是XAML:
<ListBox ItemsSource="{Binding Principal, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="first" SelectedItem="{Binding SelectedUser, Mode=TwoWay, UpdateSourceTrigger=PropertyCHanged}" IsSynchronizedWithCurrentItem="True" Width="Auto"/>
在视图模型中,这是它的DataBound属性:
// Private ObservableCollection Declaration
private ObservableCollection<principal> _principal;
// Public ObservableCollection Declaration
public ObservableCollection<principal> Principal
{
get
{
return _principal;
}
set
{
if (_principal != value)
{
value = _principal;
}
OnPropertyChanged("Principal");
}
}
几乎就是这样。我的DataGrid绑定到完全相同的属性与非常相似的XAML代码,但它将在十分之一的时间内加载所有列,它将采用Listbox或TreeView。
我已经有一段时间了,但它还没有结账。 谁知道为什么?
答案 0 :(得分:1)
我发现ListBox和ListView非常快。
尝试
VirtualizingStackPanel.VirtualizationMode="Recycling"
你是否有可能不限制大小?
如果你不限制大小,那么它将绘制所有元素。