none
如何在不同Page 中切换,并且能够保存数据? RRS feed

  • 常规讨论

  • 这里我总共有2个问题:我是用C++ 语言开发

    1。我在MainPage 上,放了4个button 和 右侧1个Frame控件,点击每个button 的时候,会去执行如下代码
        在 button1 的Click 里边,做如下: 

        TypeName PageType = {"SmsProject.InboxPage",TypeKind::Custom};

        FrameItemContent->Navigate(PageType,this); 

        在 button2 的Click 里边,做如下: 

        TypeName PageType = {"SmsProject.OutboxPage",TypeKind::Custom};

        FrameItemContent->Navigate(PageType,this); 

       问题是:

       1。 我想针对每个Page 调用一个 UpdatePageContent 的函数?我要怎么实现?

       2。每次每个Page 的数据都是重新加载的,没有保留我之前的数据,这个要怎么修改呢?

    问题2 :

       我在InboxPage 上有个button,点击button 之后,我希望有一个新的Page: NewItemPage,能够覆盖整个屏幕,

       然后,退出 NewItemPage 之后,InboxPage 仍然保留之前的数据,要怎么实现呢?

      另外,如何单独关闭 NewItemPage 呢?

    2012年9月18日 2:57

全部回复

  • 将每个加载的Page 的属性设置为 NavigationCacheMode="Enabled",可以保证每个被加载过的Page 再次被调用的时候,是加载上一次的数据。

    2012年9月18日 7:13
  • 1, 如你所说,开启缓存可以实现。 如果你使用了MVVM模式,或者设计良好,页面数据都是通过绑定而依赖与一个数据源对象的话,你可以缓存这个对象,即使页面本身没有缓存,只要在页面载入时候将缓存的数据源再次赋值到页面上,让所有的数据绑定获得缓存的数据,也可以恢复上次浏览数据。 我们可以在OnNavigatedFrom 去缓存数据源对象,在OnNavigatedTo 去恢复。缓存方式如果需要持久化,则可以通过序列反序列方式。如果不需要持久化,则存在一个Dictionary即可。

    2, 占满整个屏幕只是一个控件大小修改的问题, 比如之前你的 Frame Grid.Column="1" ,你可以修改他为 Grid.ColumnSpan="2" 跨两列显示,则可以占满屏幕。

    如果你是想要显示一个全新的Frame来覆盖原先的,你可以在原页面的Grid 的最高层加入一个Frame  先隐藏他,到要显示的时候显示, 关闭操作只是一个隐藏操作而已。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月18日 8:18
    版主
  •    1。 我想针对每个Page 调用一个 UpdatePageContent 的函数?我要怎么实现?

    Ask again!

    thank you!

    2012年9月19日 7:32
  • OnNavigatedTo 方法不管有没有缓存 ,始终 在导航到页面 都会被调用 ,所以你可以在这个里面调用你的 UpdatePageContent 的函数

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月19日 9:09
    版主
  • 你说的那种方法,我明白了!目前我不是在加载Page 的时候,调用,而是在MainPage种调用的!

     针对每个Page是将它Navigate 到Frame 控件中的。

    代码如下:

    1。我在MainPage 上,放了4个button 和 右侧1个Frame控件,点击每个button 的时候,会去执行如下代码
        在 button1 的Click 里边,做如下: 

        TypeName PageType = {"SmsProject.InboxPage",TypeKind::Custom};

        FrameItemContent->Navigate(PageType,this); 

        在 button2 的Click 里边,做如下: 

        TypeName PageType = {"SmsProject.OutboxPage",TypeKind::Custom};

        FrameItemContent->Navigate(PageType,this); 

    如果我需要调用 .InboxPage 和 OutboxPage 中的 UpdatePageContent 函数,要如何实现呢??

    2012年9月19日 9:43
  • 通过回调。你可以在每个子页中创建一个事件,然后在每个子页导航后,在MainPage中将MainPage的UpdatePageContent 注册在每个子页对象的这个事件上。之后只需要在子页中调用这个事件就可以执行你的UpdatePageContent 了

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月19日 10:17
    版主
  • 1. 有 如何注册回掉函数的例子吗?我也想学习下这个的过程!

    可否给个地址!微软的Sample 也可以!

    2. 另外,我是在MainPage 中放了个 Frame(x:Name = FrameItemContent),然后,我需要在MainPage 中,调用  OutboxPage & InboxPage 的 UpdatePageContent 函数!

        而不是相反! 谢谢!

      

    2012年9月19日 10:35
  • 事件机制就是 一种回调,你看看http://msdn.microsoft.com/en-us/library/windows/apps/hh441569.aspx delegates and events.

    或者你考虑下所有的子页都实现一个接口 ,这个接口中定义一个 UpdatePageContent 函数, 然后你就可以保证所有的页面都可以调用此方法。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月20日 9:10
    版主
  • 已经搞定!感谢支持!

    2012年9月24日 2:49