【问题标题】:How to reset master detail page?如何重置主详情页面?
【发布时间】:2020-07-07 16:14:30
【问题描述】:

我正在尝试使用 xamarin 表单构建应用程序。 我有一个使用 MasterDetail 页面实现的导航抽屉。当用户按下后退按钮并再次访问同一屏幕时,我需要重置 MasterDetail 的内容。尝试执行此操作时出现以下错误:

System.InvalidOperationException: Master 必须没有父级。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 你说“重置内容”是什么意思?什么时候应该这样做?你的意思是硬件后退按钮?请提供更多详细信息。
  • 我需要重新初始化主详细信息页面中的页面。我需要这样做,当用户按下硬件后退按钮并再次重新访问页面时
  • 据我所知,Xamarin.Forms 不提供挂钩来了解用户何时按下硬件。但我认为这不是你需要的。当您重新访问该页面时,它每次都会初始化,所以我没有看到问题。但是如果你想做一些改变,你可以使用其中一个 MVVM 框架(我使用 Prism)并在方法中做一些代码,当你导航到你的页面时会调用它。关于你的例外,我不知道它是什么意思。请添加一些代码。

标签: xamarin.forms navigation-drawer


【解决方案1】:

我在尝试将新的 MasterdetailPage() 设置为 Application.Current.MainPage 时也遇到了同样的问题。 MasterdetailPage.Detail 中的前一个页面实例保留在内存中的某个位置,这可能会导致事件因 MessagingCenter 无法取消订阅而触发两次。

解决方案是将 MasterDetailPage 的一个实例保存在一个全局变量中,并将这个实例重新用于 Application.Current.MainPage。这样就不会创建新页面。

【讨论】:

    【解决方案2】:

    您可以在设置masterdetailpage实例之前清除新页面的父级。

    newPage.Parent = null;
     MyMasterDetailPage.Instance.Detail = newPage;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多