我有一个 WPF 数据网格,绑定到由数据库中的 linq-to-sql 填充的列表。绑定是双向的,允许用户更改每行中的值
<wpf:DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding MyList}"
SelectedItem="{Binding SelectedItem}" >
当显示大约 20000 行时,程序在列表初始化期间因内存不足异常而崩溃。即使行数较少,性能也会变得难以忍受。
我知道在初始化时,数据网格会遍历每一行以测量最大列宽和其他属性。无论它们是否在屏幕上,它显然都会对所有行执行此操作。
我尝试将数据网格绑定到myQuery.ToList()
(允许通过单击列对数据网格进行排序)或直接绑定到 IQueryable。(排序不适用于此)
两者都产生相同的结果。仅具有 20000 个项目的 ToList() 不会导致大量内存消耗,仅当它绑定到 datagrid 时才会发生这种情况。
忽略数据网格中的 20000 行有多有用的问题(这些是当前要求;更改这些工作示例会有所帮助)。
什么是最简单的方法来延迟加载当前显示在屏幕上的数据,而忽略其他所有内容,直到它被滚动到视图中?
这可以在没有第三方库和主要代码更改的情况下完成吗?
如果没有,推荐的解决方法是什么?