从导航服务返回时如何保持上一页的页面状态?
How to keep the page state of previous page when going back from Navigation service?
我对 Xamarin.Forms 上的 Prism Navigation 有疑问。
假设我有 3 个页面,导航堆栈看起来像 Navigation/ViewA/ViewB/ViewC
。当从 ViewA 导航到 ViewB 时,我有一个列表作为参数传递,所以基本上在 ViewB 中我将使用 OnNavigatedTo
方法来获取参数并将数据设置为一些可绑定的属性。
然后,从 ViewB 到 ViewC,我也需要传递相同的参数,所以这个参数有点像通过 3 个视图。
然后问题就来了,当我从ViewC回到ViewB的时候,ViewB还是会调用OnNavigatedTo来获取参数,但是这次因为是从ViewC导航过来的,所以ViewC没有传那个参数的代码视图 B.
然后,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的navigate相同的方法,从ViewC返回时出现问题
我想要一个理想的解决方案来解决这个问题。请 Prism 团队的某个人帮忙检查一下,我相信这是需要处理的事情。
当 View 在 Stack 中时,它不会被释放或做任何事情,所以它的状态会被保留。在这里你只需要知道你的视图是否被初始化:
在视图 B 中:
private bool _isInitialized;
public void OnNavigatedTo(NavigationParameter paramters)
{
if (_isInitialized)
return;
// This code will be null when going back from ViewC
var list = parameters["SomeData"] as List<string>();
this.SomeBindableData = list;
_isInitialized = true;
}
我对 Xamarin.Forms 上的 Prism Navigation 有疑问。
假设我有 3 个页面,导航堆栈看起来像 Navigation/ViewA/ViewB/ViewC
。当从 ViewA 导航到 ViewB 时,我有一个列表作为参数传递,所以基本上在 ViewB 中我将使用 OnNavigatedTo
方法来获取参数并将数据设置为一些可绑定的属性。
然后,从 ViewB 到 ViewC,我也需要传递相同的参数,所以这个参数有点像通过 3 个视图。
然后问题就来了,当我从ViewC回到ViewB的时候,ViewB还是会调用OnNavigatedTo来获取参数,但是这次因为是从ViewC导航过来的,所以ViewC没有传那个参数的代码视图 B.
然后,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的navigate相同的方法,从ViewC返回时出现问题
我想要一个理想的解决方案来解决这个问题。请 Prism 团队的某个人帮忙检查一下,我相信这是需要处理的事情。
当 View 在 Stack 中时,它不会被释放或做任何事情,所以它的状态会被保留。在这里你只需要知道你的视图是否被初始化:
在视图 B 中:
private bool _isInitialized;
public void OnNavigatedTo(NavigationParameter paramters)
{
if (_isInitialized)
return;
// This code will be null when going back from ViewC
var list = parameters["SomeData"] as List<string>();
this.SomeBindableData = list;
_isInitialized = true;
}