c# - TreeView 加载上的 UWP 问题 - 很长的列表
问题描述
我已经查看了这篇文章Treeview 加载问题,但它并没有解决我的问题。我有这个结构:人 - 访问
访问是分层的,所以我可以拥有:
Person
- Visit 1
- Visit 2
- Visit 2.1
- Visit 2.2
并且无法确定哪个是结构。
我已经定义了 2 个类 Person 和 Visit 和 Using EFCore 我已经映射了数据库。
人员加载代码是:
var aList = await context.VVisitHierarchy
.Where(a => a.CodPaz == _PazV.CodPaz && a.Parent == null)
.OrderBy(b => b.CreationOrd).ThenBy(b => b.Data).ThenBy(b => b.CodPar)
.ToListAsync();
foreach (var item in aList)
{
MTreeViewVisit aMVisit = new MTreeViewVisit(item);
Visits.Add(aMVisit);
await aMVisit.LoadDataAsync();
}
然后我加载所有访问:
public async Task LoadDataAsync()
{
using (var context = new TitoDocContext())
{
var aList = await context.VVisitHierarchy
.Where(a => a.CodPaz == _VisitH.CodPaz && a.Parent == _VisitH.CodPar)
.OrderBy(b => b.CreationOrd).ThenBy(b => b.Data).ThenBy(b => b.CodPar)
.ToListAsync();
foreach (var item in aList)
{
MTreeViewVisit aMVisit = new MTreeViewVisit(item);
Visits.Add(aMVisit);
await aMVisit.LoadDataAsync();
}
}
}
完美的是我看到树逐渐加载,非常好。不好的是,当我尝试扩展以下级别时,当我有多个级别时,由于项目尚未加载(或者这是我的假设),我得到一个未捕获的错误。我假设是这种情况,因为对于小数据集,它总是可以完美运行,但是当我有 1000 个客户和 10.000 次访问时,它会随机死锁。
我读过我可以“等待加载时添加根元素”但是我如何确定是否加载了所有异步?此外,我需要以正确的顺序(来自查询)而不是“创建速度”中的根元素,所以我该怎么办?也许我可以创建没有子元素的根元素,然后在加载整个结构后添加子元素?但是再次如何等待所有人然后发出更新信号?
解决方案
推荐阅读
- postgresql - JSONB 列列表上 WHERE 子句中的字符串项
- angular - 引导开关的调用事件改变
- python - C++ 正则表达式 * 只保存最后匹配的
- javascript - 使用正则表达式比较 switch 语句中的数组元素
- html - 有没有办法可以改变css中的边框高度?
- java - 重用同一个数组而不是声明一个新数组有意义吗?
- python - 根据参数类型设置 issubset 性能差异
- .htaccess - 防止人们直接在我的网站上打开 pdf
- mysql - 编写为备份文件创建日期目录的小型 Shell 脚本时遇到问题
- perl - 在单次迭代中提取相同模式的第一次和最后一次出现之间的所有内容