具有多个参数和定时的MAUI导航

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

在名为“审批”的页面上,我列出了不同的会计对象(旅行订单、费用报告等)。

每个都可以批准或拒绝。

例如,在批准 ID = 7 且 DocumentType = TravelOrder 的 TravelOrder 后,我想切换到名为“已批准”的页面,在其中我想显示已批准对象的列表,并选择我拥有的 TravelOrder刚刚处理完。

因此,将上面对象的状态更改为“已批准”后,我执行此行:

await Shell.Current.GoToAsync($"//Approved?refreshData={true}&documentMode={thisExpenseReport.DocumentMode}&id={thisExpenseReport.ID}", true);

在 Approved_VM 中,我有以下查询属性:

[QueryProperty(nameof(RefreshData), "refreshData")]
[QueryProperty(nameof(DocumentMode), "documentMode")]
[QueryProperty(nameof(ID), "id")]

我有

public string DocumentMode
        {
            set => _documentMode = value;
        }       
    public string ID
        {
            set => _id = value;
        }   
    public string RefreshData
        {            
            set
            {
                PopulateList();
                SelectApprovedObject();
            }
        }

首次显示 Approved 页面时,我只执行 PopulateList(),因为在 Approved.xaml.cs 的构造函数中我有调用

await viewModel.PopulateList();

但是,如果我来自 Approvals,我想从服务器重新查询数据,并选择 ID=7 且 DocumentType = TravelOrder 的对象,正如您在我的 RefreshData 设置器中看到的那样。

但是,RefreshData 的 setter 会先执行,因此 SelectApprovedObject() 会先执行,然后再设置 _documentMode 和 _id 的值。

这不起作用。

我该如何实现这个?

再次,我需要从 Approvals 导航到 Approved,重新查询与状态“Approved”相关的数据,并通过 ID 选择特定对象。

navigation parameter-passing maui
1个回答
0
投票

首先,实现 IQueryAttributable 接口,如下所示:

public partial class MyViewModel: ObservableObject, IQueryAttributable

然后,实现方法:

public void ApplyQueryAttributes(IDictionary<string, object> query)

最后,通过以下方式访问您的数据:

query[nameof(RefreshData)];
query[nameof(DocumentMode)];
query[nameof(ID)];

并按照您喜欢的任何顺序分配它们。

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