首页 > 解决方案 > 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 次访问时,它会随机死锁。

我读过我可以“等待加载时添加根元素”但是我如何确定是否加载了所有异步?此外,我需要以正确的顺序(来自查询)而不是“创建速度”中的根元素,所以我该怎么办?也许我可以创建没有子元素的根元素,然后在加载整个结构后添加子元素?但是再次如何等待所有人然后发出更新信号?

标签: c#uwpentity-framework-coretreeviewloading

解决方案


推荐阅读