问题描述
我的 Xamarin Forms Shell 应用中有两个页面。 一个列表页面和另一个是详细信息页面。 当我在列表页面中选择项目时,将显示详细信息页面。我能够将一个参数传递给第二页。我知道如何传递第二个值。但是我应该如何接收第一个属性本身的第二个值。
列表页面:
const postAdapter = createEntityAdapter({
selectId: myIdExtractor,});
详情页面:
async private void myLines_ItemTapped(object sender,ItemTappedEventArgs e)
{
var line = (Models.QLines)e.Item;
int pno = line.PageNo;
int lno = line.LineNo;
await Shell.Current.GoToAsync($"//mainTabs/pages?pageno={pno}&lineno={lno}");
}
解决方法
作为另一种解决方案,您可以通过页面的静态成员传递参数。例如页面可能包含静态 ViewModel 对象,该对象将在页面出现之前进行初始化。
public class ViewModel : ViewModelBase
{
public string Text { get; set; }
public int Number { get; set; }
}
public class MyPage : Page
{
static ViewModel _viewModel = new ViewModel();
public MyPage()
{
BindingContext = _viewModel;
}
public static void InitPage(string text,int number)
{
_viewModel.Text = text;
_viewModel.Number = number;
}
}
}
调用者内部代码
static async Task GotoPage()
{
MyPage.InitPage("Text",123);
await Shell.Current.GoToAsync($"//mainTabs/pages");
}
,
如 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/navigation#pass-data 中所述,您可以使用 QueryProperty
属性在 queryID
和目标属性之间进行映射:
[QueryProperty("Pageno","pageno")]
[QueryProperty("Lineno","lineno")]
public partial class DetailPage: ContentPage
{
private int _Pageno;
public int Pageno
{
get { return _Pageno; }
set { _Pageno = value; }
}
private int _Lineno;
public int Lineno
{
get { return _Lineno; }
set { _Lineno = value; }
}
,
您可以在detailPage
中使用参数public DetailPage(string val1,string val2)
{
}
然后在MyPage
中调用它Navigation.PushAsync(new DetailPage("parameter1","parameter2"));