如何修复 MAUI 应用程序崩溃并显示“检测到布局周期。布局无法完成。”当数据加载到视图中超出限制时出现异常

问题描述 投票:0回答:1

我们正在使用 .NET8 中的 MAUI 平台构建一个应用程序,该应用程序显示几天内分配给人们的任务的表格数据。该页面加载良好,并在网格中显示较短持续时间(最多一周)的数据。但如果选择的持续时间长于一周,这次应用程序会在页面即将加载时崩溃。它崩溃并显示“检测到布局周期。布局无法完成。”错误。崩溃发生时的异常详细信息 我们使用 CollectionView 来显示 Grid 内的表格数据,其行和列代表应用程序中视图的不同部分。 这个错误是否意味着数据有问题(尽管我已经仔细检查过,事实并非如此)?我该如何调试这个问题?我附上异常的屏幕截图。如果需要,我可以分享 xaml。请帮忙,因为我们已经被这个问题困扰了一段时间了。

我试图找到 MAUI 二进制符号,但异常似乎绕过了它们。我还检查了有关此错误的堆栈溢出帖子。 MAUI 论坛 (https://github.com/microsoft/microsoft-ui-xaml/issues/6218) 上似乎报告了一个关于类似问题的错误,该论坛仍然处于开放状态。我不确定我们的应用程序是否也面临同样的问题,因为该问题涉及 ListView,但我们正在使用 CollectionView。

我创建了一个存储库(https://github.com/ProfLavneetSingh/LayoutCrash),其中包含示例代码,该代码不会崩溃,但需要永远加载网格。

我们希望显示一个网格(如 Microsoft Teams 日历视图中)来跟踪分配给人员的任务。它应该可以水平滚动(滚动浏览持续时间内的所有日期,保持任务框大小不变)和垂直滚动(浏览人员列表)。我们使用 CollectionView.Span 设置集合列以匹配持续时间中的天数。我们使用 CollectionView 是因为文档说它应该用于表格数据。但它在示例中加载时没有长时间延迟(并且在应用程序代码中崩溃)。 出路何在?如何才能实现高效加载的任务网格视图?

layout crash maui cycle collectionview
1个回答
0
投票

首先:

这必须走:

    <ScrollView  x:Name="ScrollView"
                 Grid.Column="0"
                 Orientation="Both">

垂直集合视图必须垂直限制。

您不能将 ScrollView、StackLayout、Collection/ListView 相互堆叠在一起。 至少不是同一个方向。

如果您有一个高度为 500 的页面,其内部有带有集合视图的网格,其中包含 100000 个高度为 100000 的项目,则会发生以下情况:

Grid 的高度为 500。Collection 视图的高度为 500,这个 500 的高度用于显示 5 个项目。 (虽然不是 5,但也很接近)

如果用 ScrollView 替换 Grid,则不必准备那(理论上的)5 个项目,而是必须准备所有 100000 个项目来计算集合视图的高度,然后将其放入滚动视图内。

(我不需要解释这有多糟糕,对吧?)

您必须使用集合视图本身的滚动视图。 除了滚动之外,它还有加载系统,可以在需要时准备物品。

作为旁注: 这个嵌套集合视图已删除滚动...

阅读此内容:https://learn.microsoft.com/en-us/dotnet/maui/user-interface/layouts/bindablelayout?view=net-maui-8.0

© www.soinside.com 2019 - 2024. All rights reserved.