如何检查PageLoaded和ModelLoaded?
我试图检查并阅读每一行代码,看看错误出在哪里,但实际上一切逐渐变得复杂,我无法控制。所以我决定找到一种方法来测试PageLoaded && ModelLoaded。但我不知道具体的方法。
我有一个Xaml页面,该页面BindingContext后面带有模型C#代码:
using CommunityToolkit.Maui.Views;
using NameProject.Models;
namespace NameProject.Pages;
public partial class AlertPage : Popup
{
AlertModel alertmodel;
public AlertPage(AlertModel alertmodel)
{
InitializeComponent();
BindingContext = alertmodel;
this.alertmodel = alertmodel;
alertmodel.Alertpage = this;
}
}
在模型中,我有一个 intArray 属性,每次创建 Xaml 页面时都会传入此属性,因此请确保它永远不会为空。
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using NameProject.Pages;
namespace NameProject.Models
{
public partial class AlertModel : ObservableObject
{
public AlertModel() => test();
void test()
{
//await Task.Delay(2000);
//if (Indexcontrol != null)
//{
foreach (int item in Indexcontrol)
{
if (item == 1) Showcontrolred = true;
}
//}
//else return;
}
[ObservableProperty]
private int[]? indexcontrol;
[ObservableProperty]
private AlertPage? alertpage;
在模型的构造函数中,我使用 intArray Indexcontrol 变量。问题是模型上的构造函数始终无法看到 Indexcontrol 的值并抛出 System.NullReferenceException:“未将对象引用设置为对象的实例。”
如果我删除 Comment Task.Delay(2000) 并将函数更改为异步任务,它就可以完美工作。但如果 PageLoaded && ModelLoaded 完成工作的速度慢于 2000 毫秒,这实际上是不正确的。而且我也不想使用异步任务,因为还不需要这项工作。我只是暂时使用它来进行调试。
我尝试测试页面加载,但这确实很麻烦,因为我必须从模型访问功能。
我尝试在构造函数模型中声明 PageLoaded 函数,但它导致了错误。
问题:在模型上测试 PageLoaded 和 ModelLoaded 的最佳和最简单的方法是什么?
这里有两件事需要解决。
首先,您要在构造函数中调用这个“异步任务”。你不应该。耗时的操作不应该存在。
更重要的是 - 这是瞬态注入的弹出窗口,其构造函数用于构建页面。我不知道在 Windows/Mac 上如何,但在移动设备上这绝对不行。
其次,有很多方法可以调用页面中的代码。 (该代码不应该首先出现在页面中,但无论如何)。一是社区工具包中的消息系统。
如果您不明白我在说什么,请在构造函数的第一行放置一个断点,并注意当您调用
test()
时,页面字段未设置。不要将其从构造函数移动到方法并交换位置,因为即使设置了,页面也不会被构造。