我有问题如何在UWP中实现子页面导航。该页面在RootFrame中,我可以在导航上使用它。但我想用这样的方法:
<Page>
<Grid>
<Frame x:Name="MyFrame"/>
</Grid>
</Page>
我想要的是,在MyFrame中使用ViewModel中的导航方法。我可以从代码背后调用该方法,但我正在使用MVVM开发我的应用程序。我不确定,Template10是否能处理子帧.
我很感激你的建议。
编辑:更多细节:我有支点控件,在页面中。枢轴有两个标签(枢轴)。枢轴的内容必须是可导航的。我的意思是:我需要一个框架,并在枢轴中使用它来导航。我的问题是,如何使用或如何从ViewModel调用pivotitem中的框架,特别是我需要调用导航方法。现在,我正在使用Template10 10的导航服务,它正在使用根框架。我不知道,怎么用它来做其他的,比如说子帧。
发布于 2016-03-18 16:55:16
你总能做到的。
var nav = Bootstrapper.NavigationServiceFactory(BackButton.Attach, ExistingContent.Exclude, this.Frame);
这将为页面中的框架提供导航服务。然后,如果愿意,可以使用会话状态。
Bootstapper.SessionState["MyNav"] = nav;
从这里开始,您的视图模型可以访问服务并导航。你可以重复这一点,因为你有多少帧。然后,您可以在视图模型中处理导航,而无需考虑框架的“位置”,只是您的逻辑需要导航。
这有道理吗?
发布于 2016-03-10 21:34:27
我不知道您将如何触发导航更改,所以我假设它将从单击按钮开始。我还假设按钮的Command
属性已经绑定到视图模型中的ICommand
(相同的概念可以应用于不同类型的视图)。
我们现在要做的就是让ICommand
实现调用我们的自定义NavigationService
来执行内容切换。这个NavigationService
类只是窗口全局框架的一个简单代理。其主要导航方法可以简单如下:
public void Switch()
{
var rootFrame = Window.Current.Content as Frame;
if ((rootFrame.Content as ParentPage) != null)
{
rootFrame.Navigate(typeof(ChildPage));
}
}
发布于 2016-03-14 20:44:36
因此,您已经用Template10标记了这个问题,但是对于整个UWP来说,这似乎是一个更普遍的问题。我想知道你是否考虑过这种方法的所有内在复杂性-特别是与暂停和复会有关。对于您拥有的每个框架,您都需要保存和恢复导航状态,当您有嵌套的框架时,导航状态不是直进的。您是否也考虑过全球导航将如何工作?
模板10确实支持多个NavigationServices的概念,因此支持多个框架,但只有从您的角度才能创建它们。Template10本质上并不理解这些帧之间如何相互关联,因此不能执行自动反向传播,如果您有以下内容:
FrameA[Main->Page1->Page1:Pivot1.FrameBView1->View2->View3]
这里我们有两个框架- FrameA和FrameB。FrameA已经从Main导航到Page1。Page1有一个在PivotItem1中托管FrameB的数据轴,FrameB从View1导航到View 2,从View2导航到View 3。
全局导航(即外壳返回等)将自动连接到FrameA,因此您需要拦截该操作,然后处理您自己的FrameB导航活动。
看一看BackButtonBehavior,看看如何能够拦截全局回退,然后执行自己的操作。
https://stackoverflow.com/questions/35926809
复制相似问题