有没有办法对在 XAML 启动之前运行的方法进行排序?(MVVM)

is there a way to order methods that run before the XAML starts? (MvvM)

提问人:Bob 提问时间:9/25/2023 最后编辑:Ken WhiteBob 更新时间:9/25/2023 访问量:69

问:

在一个应用程序中,我有一个页面,其中包含两个方法,它们在 Xaml 运行之前在 ViewModel 中运行。它们以错误的顺序运行,我想知道是否有办法告诉它先运行哪种方法。Mvvm

第二个运行的方法是接口的实现,用于从上一页传递对象。我希望它先运行。IConvertible

首先运行的方法是 ,它是该方法的 MVVM 答案。我希望它排在第二位。Appearing()OnAppearing

    // this method runs first, I would like it to run second
    [RelayCommand]
    private async Task Appearing()
    {
        // no access to VideoObj because this method runs before ApplyQueryAttributes
        string x = VideoObj.ThumbnailFilename;
    }

    // this method runs second, I would like it to run first
    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        Package = query["Package"] as VideoPackage;
        VideoObj = Package.video;
    }

在 C# 或 Maui 中,有没有办法订购这种东西?

C# 方法 maui-shell

评论

1赞 Jason 9/25/2023
为什么不直接将代码放在 Appearing in the other method 中?
0赞 Liqun Shen-MSFT 9/25/2023
如何设置此页面的 BindingContext?ApplyQueryAttributes 方法应首先运行,然后是 Appearing 命令。我不知道为什么你会得到相反的结果。您能否分享更多代码来帮助我们重现?

答:

0赞 Stephen Quan 9/25/2023 #1

为什么不在两者都被触发后触发一个方法,这样它就不会与顺序无关?例如:

    bool Appeared { get; set; } = false;

    [RelayCommand]
    private async Task Appearing()
    {
        Appeared = true;
        if (Appeared && VideoObj !== null) HandleThumbnail();
    }

    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        Package = query["Package"] as VideoPackage;
        VideoObj = Package.video;
        if (Appeared && VideoObj !== null) HandleThumbnail();
    }

    private void HandleThumbnail()
    {
        string x = VideoObj.ThumbnailFilename;
    }

评论

0赞 Bob 9/28/2023
如果我这样做,那么这两种方法都将在 Xaml 运行后发生。我需要这两种方法来运行 xaml 之前。话虽如此,这是一个很好的技术。