UWP商店框架在导航上



在我的UWP应用中,我想使用框架在两个(或更多(页之间导航。页面的内容由用户从列表中选择来确定。当选择列表更改时,frame.Navigate()方法被调用:

FruitsFrame.Navigate(typeof(ApplePage));

这可以正常工作,但是每次称为Mothod时,都会创建一个新实例,从而丢弃对ApplePage进行的更改。

我的解决方案是将ApplePage作为参数传递,但这觉得很不对劲。我可以使用

FruitsFrame.Content = applePage;

而是OnNavigatedToOnNavigatedFrom不会被调用。目前,我依靠这两个事件,请注意ApplePage中的开始和停止任务。

那么如何正确使用页面导航?我想到的唯一解决方案是建立一个包装类别,该类别具有与ViewModel非常相似的所有信息Neccesary(包括任务(。这是如何使用框架吗?

只需使用以下代码:

>         public Page()
>         {
>             this.InitializeComponent();
>             this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
>         }

Frame主要旨在作为导航堆栈的支架。因此,它可以保存当前显示的页面,打开页面的历史记录及其导航参数。如果启用了NavigationCache并启用了单个页面的NavigationCacheMode,它甚至可以将页面保存在内存中的导航堆栈中,包括其控件的状态。

在您的情况下,听起来我们不是在谈论基于"堆栈"的导航,而是类似" tabs"的内容 - 内容的多页应该保留在内存中并应恢复。在这种情况下,您有两个选择。

第一个是您已经发现的一个 - 将页面保存在内存中,并将其设置为内容控制的Content。它不必是Frame POR-SE,而是仅是简单的ContentControlContentPresenter。为了使事情变得更加干净,您可以使用UserControls而不是Pages,以使页面的导航方面显然不可用,并且不能意外依靠导航事件。

第二个解决方案是实际使用某种MVVM解决方案,这将使您可以保持内存中相关的ViewModel,该解决方案将包含基于用户的状态并保持内存,而页面及其UI将被摧毁。这是可取的,因为基于UI的控件确实会应变存储器,并且简单的基于数据的视图模型将无与伦比便宜。在这种情况下,您将首先导航到该页面,然后检查视图模型定位器,以找到适当的视图模型的新实例或现有实例,将其设置为页面的DataContext。MVVMlight已经从开箱即用了一个ViewModel定位器,因此可能非常适合您的需求。

相关内容

  • 没有找到相关文章

最新更新