如何检查PageLoaded和ModelLoaded?

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

如何检查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 的最佳和最简单的方法是什么?

c# mvvm maui
1个回答
0
投票

这里有两件事需要解决。

首先,您要在构造函数中调用这个“异步任务”。你不应该。耗时的操作不应该存在。

更重要的是 - 这是瞬态注入的弹出窗口,其构造函数用于构建页面。我不知道在 Windows/Mac 上如何,但在移动设备上这绝对不行。

其次,有很多方法可以调用页面中的代码。 (该代码不应该首先出现在页面中,但无论如何)。一是社区工具包中的消息系统。

如果您不明白我在说什么,请在构造函数的第一行放置一个断点,并注意当您调用

test()
时,页面字段未设置。不要将其从构造函数移动到方法并交换位置,因为即使设置了,页面也不会被构造。

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