如何将SourcePageType转换为Page?

时间:2016-03-29 13:28:20

标签: c# windows-runtime windows-phone-8.1 winrt-xaml uwp-xaml

我现在正在构建一个WinRT应用程序,我正面临着这个问题。

我想要实现的是我需要阅读或修改我导航的上一页的属性。

所以,让我们说我有两个页面:with tempfile.NamedTemporaryFile('w+t') as f: f.write(mylist) f.flush() ... rest of code using temp file ... MainPage

我从WatchPage导航到WatchPage并在MainPage WatchPage's事件内我需要访问OnNavigatedTo内的属性,而不使用导航参数。

我怎样才能做到这一点?

MainPage

2 个答案:

答案 0 :(得分:1)

使用现有框架无法完成您尝试做的事情。也就是说,BackStack中不存在对上一页实例的引用。唯一存在的是,老实说,重新创建实例的方法。也就是说,BackStack包含类型和参数。使用这两个元素,您应该能够在用户在Frame中导航回来时重新实例化该类。顺便提一下,这些成分包括类型和可序列化参数 - 只有可序列化参数,app才能将BackStack保存到NavigationState,并在应用程序暂停/终止时可靠地恢复它。

这就是故事,现在是你的问题。我认为有几种可能的解决方案,老实说,我认为其中任何一种都是可以接受的。

第一个警告是你必须使用NavigationCacheMode = Enabled。如果没有这个,您的页面(包括上一页)将在每个导航中重新创建,包括Back。这是UWP的一个重要行为,因为它假定您的页面已从内存中删除以节省总体占用空间。设置NavigationCacheMode将覆盖它。

  1. 创建静态参考
  2. 这很容易吗?像这样:

    public readonly static MainPage Instance;
    public MainPage() {
        Instance = this;
    } 
    
      

    请注意这一点,因为它要求您的视图相互引用。这是一个相当小的风险,恕我直言。

    1. 传递参​​考
    2. 使用这样的Navigate(参数)最容易实现。

      // MainPage
      public void GoAway() {
          this.Frame.Navigate(typeof(SecondPage), this);
      } 
      
      // SecondPage
      MainPage MainPage;
      public void OnNavigatedTo(object parameter) {
          MainPage = parameter as MainPage;
      } 
      
        

      请注意这一点,因为它要求您传递无法序列化的内容。但有时候,这是可以接受的。

      这些都有意义吗?

      祝你好运。

答案 1 :(得分:0)

我建议使用静态属性和方法创建一个静态类。我不认为你试图实现的是一个好习惯..相反,这是我的例子:

   public static class Shared
    {
        public static string property = "something..";

        public static async Task<bool> Method()
        {
            await Task.Delay(400);
            return false;
        }
    }

然后,您可以调用方法,从任何位置获取或设置属性:

bool result = await Shared.Method();