如何使用 Prism 更改主详细信息页面的主部分中显示的内容
How do I change the content shown in the master section of a master detail page using Prism
我正在从 MvvmCross 迁移我们的应用程序,因为我们需要添加 Intune 支持,而使用 MVX 可以防止这种情况发生。
该应用程序本质上是一封电子邮件 reader,因此目前我们正在使用 MasterDetail 页面并将文件夹列表加载到 master 中,在 phones 上成为弹出窗口,在平板电脑上它出现在拆分视图的左侧。
当你从这个页面 select 一个文件夹时,我们会显示一个消息列表 - 这会加载到 phone 上的详细信息,但对于平板电脑,我们使用 MVX 功能将其加载到主控中,这也包含在导航页面中,因此您可以返回到文件夹列表。本质上,我们在平板电脑的主要部分中有一个导航堆栈,在详细信息部分中也有一个。
我已经检查并试用了 Prism 样本,但它们似乎没有涵盖这种情况。该文档建议仅在主部分中包含固定内容,并且这将绑定到主细节视图模型。这与我们目前的不同,本质上我们可以根据成语控制任何页面的结束位置。
我只想确认我可以根据设备习惯用法将页面加载到详细信息或主页面中,非常感谢任何示例!
我自己通过查看源代码回答了这个问题,但 Prism 导航服务不支持将页面加载到母版中。一切都是可以覆盖的,但我觉得如果我尝试引入这个概念会导致很多变化和问题。
我们将不得不在内部讨论是否可以接受更改 UI 平板电脑上的流程,如果不能接受,那么 Prism 就不行了,我们将寻找替代方案或编写我们自己的导航服务来支持它.
MasterDetailPage 的 Master 属性 是一个基本的 Page 对象,因此它没有可用的导航堆栈,但 属性 本身确实有一个 getter 和一个 setter 所以你应该能够手动设置页面。我们使用母版页,作为快速测试,我可以使用以下方式设置它:
((MasterDetailPage)Application.Current.MainPage).Master = new SwapMaster();
我没有尝试的可能是将 Master 设置为 NavigationPage。然后,您也许可以推送到 Master 的导航堆栈。再一次,我没有尝试这个 ATM。
更新:
所以我确实快速地尝试将 Master 设置为导航页面,然后将页面推入和弹出堆栈。它确实有效,但行为有点松鼠,但它确实表明这是可能的。
压栈:
((NavigationPage)Master).Navigation.PushAsync(new SwapMasterPage());
出栈:
((NavigationPage)((MasterDetailPage)Application.Current.MainPage).Master).Navigation.PopAsync();
我正在从 MvvmCross 迁移我们的应用程序,因为我们需要添加 Intune 支持,而使用 MVX 可以防止这种情况发生。
该应用程序本质上是一封电子邮件 reader,因此目前我们正在使用 MasterDetail 页面并将文件夹列表加载到 master 中,在 phones 上成为弹出窗口,在平板电脑上它出现在拆分视图的左侧。
当你从这个页面 select 一个文件夹时,我们会显示一个消息列表 - 这会加载到 phone 上的详细信息,但对于平板电脑,我们使用 MVX 功能将其加载到主控中,这也包含在导航页面中,因此您可以返回到文件夹列表。本质上,我们在平板电脑的主要部分中有一个导航堆栈,在详细信息部分中也有一个。
我已经检查并试用了 Prism 样本,但它们似乎没有涵盖这种情况。该文档建议仅在主部分中包含固定内容,并且这将绑定到主细节视图模型。这与我们目前的不同,本质上我们可以根据成语控制任何页面的结束位置。
我只想确认我可以根据设备习惯用法将页面加载到详细信息或主页面中,非常感谢任何示例!
我自己通过查看源代码回答了这个问题,但 Prism 导航服务不支持将页面加载到母版中。一切都是可以覆盖的,但我觉得如果我尝试引入这个概念会导致很多变化和问题。
我们将不得不在内部讨论是否可以接受更改 UI 平板电脑上的流程,如果不能接受,那么 Prism 就不行了,我们将寻找替代方案或编写我们自己的导航服务来支持它.
MasterDetailPage 的 Master 属性 是一个基本的 Page 对象,因此它没有可用的导航堆栈,但 属性 本身确实有一个 getter 和一个 setter 所以你应该能够手动设置页面。我们使用母版页,作为快速测试,我可以使用以下方式设置它:
((MasterDetailPage)Application.Current.MainPage).Master = new SwapMaster();
我没有尝试的可能是将 Master 设置为 NavigationPage。然后,您也许可以推送到 Master 的导航堆栈。再一次,我没有尝试这个 ATM。
更新: 所以我确实快速地尝试将 Master 设置为导航页面,然后将页面推入和弹出堆栈。它确实有效,但行为有点松鼠,但它确实表明这是可能的。
压栈:
((NavigationPage)Master).Navigation.PushAsync(new SwapMasterPage());
出栈:
((NavigationPage)((MasterDetailPage)Application.Current.MainPage).Master).Navigation.PopAsync();