【发布时间】:2020-01-17 23:46:18
【问题描述】:
我对 Xamarin.Forms 上的 Prism Navigation 有疑问。
假设我有 3 页,导航堆栈看起来像 Navigation/ViewA/ViewB/ViewC。当从 ViewA 导航到 ViewB 时,我有一个 List 作为参数传递,所以基本上在 ViewB 中我将使用OnNavigatedTo 方法来获取参数并将数据设置为一些可绑定的属性。
然后,从 ViewB 到 ViewC,我也需要传递相同的参数,所以这个参数有点像 3 个视图。
然后问题发生了,当我从 ViewC 回到 ViewB 时,ViewB 仍然会调用 OnNavigatedTo 来获取参数,但这一次,由于它是从 ViewC 导航的,所以 ViewC 没有将参数传递给 ViewB 的代码。
那么,ViewB获取不到参数,那么如果到那个时候再去ViewC,ViewC就没有需要绑定到可绑定属性的数据了。
所以,我的问题是:我是否必须再次将相同的参数从 ViewC 传递给 ViewB?如果是这样的解决方案,那么这样做会不会有点愚蠢?有什么解决方案可以保持上一页的状态,当我们从 ViewC 返回时,一切都在那里?
感谢并期待解决方案或对此的任何见解。
我只是重现了这个问题,我知道我可以再次传回参数,但这绝对不是这个问题的理想解决方案。
让我们看看。在视图A中:
private async void Navigate()
{
var parameter = new NavigationParameter();
parameter.Add("SomeData", list);
await _navigationService.NavigateAsync("ViewB", parameter);
}
在视图 B 中:
public void OnNavigatedTo(NavigationParameter paramters)
{
// This code will be null when going back from ViewC
var list = parameters["SomeData"] as List<string>();
this.SomeBindableData = list;
}
ViewB使用了和ViewA的navigation一样的方法,从ViewC返回时出现问题。
我想要这个问题的理想解决方案。请 Prism 团队的某个人帮忙检查一下,我相信这是需要处理的事情。
【问题讨论】:
-
Prism 提供 NavigationMode ,您可以使用它来检测是否是对视图模型的新调用/回调用......在 OnNavigatedTo 方法中类似这样的事情 if (parameters.GetNavigationMode() == Prism.Navigation .NavigationMode.New) { //参数初始化 }
-
感谢 cmets Hamid,是的,我将在我的项目中使用它。实际上我知道这一点,但我只是被困在如何保持状态上。它在导航堆栈中,所以它仍然存在。这次真是太傻了。 :)
标签: xamarin.forms prism