帧.在LoadState中导航

本文关键字:导航 LoadState | 更新日期: 2023-09-27 18:24:49

我在Windows 8.1应用程序中尝试基于一点检查在页面之间自动导航时遇到了问题。它只是不想在LoadState中执行此操作时导航到另一个页面,就好像还没有加载什么一样,但它也不会给出错误。当我在执行Frame.Navigate之前使用(例如)await Task.Delay(2000)插入延迟时,我的应用程序将重定向而不会出现任何问题。

protected async override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
    {
        MyData oData = await getData();
        if (oData != null)
        {
             this.Frame.Navigate(typeof(newPage), oData);
        }
        else
        {
             // do something else
        }
    }

我是否必须将此代码放在另一个加载或导航的事件中?或者我该怎么做?

帧.在LoadState中导航

LoadStateSaveState中,您应该只保存和恢复页面状态(在挂起和重新激活应用程序时调用)。不做其他事情(比如导航)。

将您的逻辑放入OnNavigatedTo方法中。。。

如果你想从加载页面时调用的方法导航,你应该把导航代码放在OnNavigatedTo(…)中。但不要忘记在Dispatcher中包装你的代码。RunAsync(…)-xaml中的帧导航返回false

我尝试从OnNavigatedTo方法调用Frame.Navigate(…),但仍然没有进行导航。

还有其他答案说使用Dispatcher.RunAsync,但这感觉就像是在对Windows Phone的线程模型进行假设。

我要做的是:将一个处理程序附加到页面的Loaded事件,并将我的"重定向"逻辑放入其中。Loaded在OnNavigateTo之后和NavigationHelper_LoadState之后,但在页面变为可见之前激发。

    public LaunchPadPage() {
        this.InitializeComponent();
        this.navigationHelper = new NavigationHelper(this);
        this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
        this.navigationHelper.SaveState += this.NavigationHelper_SaveState;
        this.Loaded += LaunchPadPage_Loaded;
        this.app = (App)App.Current;
    }
    private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) {
        // Let's show the root zone items
        // NB: In case we don't have this data yet, do nothing
        if (app.Hierarchy != null)
        {
            DefaultViewModel["Items"] = app.Hierarchy.RootItems;
        }
    }
    private void LaunchPadPage_Loaded(object sender, RoutedEventArgs e) {
        // No data? Go to the downloads page instead.
        if (app.Hierarchy == null)
        {
            Frame.Navigate(typeof(DownloadingPage));
        }
    }