【问题标题】:Deep Navigation in Prism with MasterDetailPage causes double calling viewmodel使用 MasterDetailPage 在 Prism 中进行深度导航会导致双重调用视图模型
【发布时间】:2016-10-17 12:15:03
【问题描述】:

我有带有汉堡按钮的 MasterDetailPage。为此,我制作了这个导航路径:

var navigationStack = new Uri("https://Necessary/" + $"{nameof(ProfilePage)}/{nameof(NavigationBarPage)}/{nameof(DetailPage)}", UriKind.Absolute);  
await _navigationService.NavigateAsync(navigationStack, parameters, animated: false);

ProfilePage - MasterDetailPage,NavigationBarPage - NavigationPage

但我意识到,正因为如此,viewmodels 调用了两次,一次用于 ProfilePage - 这导致调用 DetailPageViewModel 和 Master.. 以及 Detail 的所有子项,因为它是选项卡式页面。然后当路径到达 DetailPage 时,它​​会再次调用其子级。
这对我来说是不好的行为。我做错了什么吗?以及如何在我的页面外观相同的情况下避免它?

如果它是 {nameof(ProfilePage)}/{nameof(NavigationBarPage)} 它看起来不会像我想要的那样,因为工具栏会隐藏 MasterPage 的一部分。

【问题讨论】:

  • 您需要澄清问题。其实,究竟是什么问题? “导致调用 DetailPageViewModel”或“它调用它的子级”是什么?你能解释清楚一点吗?
  • 看看我的导航路径。它有 ProfilePage,即 MasterDetailPage,其详细信息是 DetailPage。因此,因为它首先运行,所以 DetailPage 及其视图模型在此处运行,然后,在路径的末尾有 DetailPage,该视图模型在 ProfilePage 中运行,又运行了一次。但我不想有两次。我知道这是正确的行为,但我怎样才能避免它但显示相同的结果?我没有找到其他解决方案。
  • “运行”是什么意思。每个页面只创建一次虚拟机。
  • 我的意思是它创建和执行代码,就是在其中。 VM 在页面创建时创建,所以因为在一个导航路径中我有两个相同的页面(ProfilePage 的详细页面 - 即 DetailPage 和 DetailPage 本身),所以它创建了两次。

标签: c# xamarin navigation xamarin.forms prism


【解决方案1】:

根据您的 cmets,我只能假设当您定义 MasterDetailPage 时,您也定义了 DetailPage。不要这样做。只需设置您的 MasterDetailPage,并设置 Master 属性,而不设置 Detail 属性。当您使用深层链接路径导航时,会自动设置 Detail 属性。

【讨论】:

  • 成功了。我不知道我可以像这样使用 MDP。非常感谢您,很抱歉占用您的时间。我爱棱镜 ;)
  • 没问题,很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多