我目前正在使用Xamarin.Forms为Android制作一个股票控制应用程序。 我有一个额外的页面,仅用于输入Pruduct ID。我想在两种情况下使用该页面:
- 您选择一种产品以添加/删除它们
- 您选择一种产品来告诉办公室必须订购新产品
选择产品后,您将被重定向到:
- 案例 1 中的"详细库存运动页面">
- 案例 2 中的"详细信息订单页面">
问题是,下一个页面取决于之前单击的按钮。 在我的视图模型中,我有以下代码要导航(对于场景 1):
public async Task GoToNextPage(Product product)
{
await Navigation.PushAsync(new DetailStockmovementPage(product), true);
}
如何使下一个页面变量?我可以在我的 ViewModel 中定义一个变量"NextPage",从视图中设置它,例如"vm.NextPage = DetailStockmovementPage",然后像导航一样导航
public async Task GoToNextPage(Product product)
{
await Navigation.PushAsync(new NextPage(product), true);
}
我知道这是行不通的,但我认为糟糕的尝试清楚地表明了我想要实现的目标。我的意思是我可以为每个页面推送一个字符串并在导航之前进行 if 查询,但我认为这不是一个好方法。如何更改要导航到的页面?
您可以将用户的选择从第一页传递到他们选择产品的页面,然后使用该信息来决定导航到哪个页面。例如:
在应用中.cs添加一个枚举:
public enum NavTarget
{
Order,
Stockmovement
}
在 VM 中为菜单页中选择的目标定义属性:
public NavTarget Target { get; set; }
。并在导航方法中使用它:
public async Task GoToNextPage(Product product)
{
if (Target == NavTarget.Stockmovement)
await Navigation.PushAsync(new DetailStockmovementPage(product), true);
else
await Navigation.PushAsync(new WhateverItsCalledPage(product), true);
}
然后在 ProductSelectionPage 的构造函数中设置该属性:
public ProductSelectionPage(NavTarget target)
{
InitializeComponent();
// some code that sets the VM for this page
// ...
vm.Target = target;
}