在名为“审批”的页面上,我列出了不同的会计对象(旅行订单、费用报告等)。
每个都可以批准或拒绝。
例如,在批准 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 选择特定对象。
首先,实现 IQueryAttributable 接口,如下所示:
public partial class MyViewModel: ObservableObject, IQueryAttributable
然后,实现方法:
public void ApplyQueryAttributes(IDictionary<string, object> query)
最后,通过以下方式访问您的数据:
query[nameof(RefreshData)];
query[nameof(DocumentMode)];
query[nameof(ID)];
并按照您喜欢的任何顺序分配它们。