【问题标题】:How do I prevent a view from being placed on the navigation stack in Prism如何防止视图被放置在 Prism 的导航堆栈中
【发布时间】:2013-09-11 20:48:16
【问题描述】:

我在 Prism 中有一个案例,我支持 SearchContract 和 View/ViewModel 组合。

问题是这样的:当我打开搜索面板并执行多个搜索时,每个单独的搜索都放在导航堆栈上。这意味着当用户点击“GoBack”按钮时,他们会看到之前的每一个搜索结果,直到他们到达搜索开始之前显示的原始表单。

我希望 GoBack 按钮在搜索之前导航回第一页。

我看到了几种可能性:

  1. 更改 GoBack 以展开堆栈,直到第一个非搜索视图 到达。
  2. 在 NavigateFrom 中执行某些操作以从中弹出当前视图 离开活动搜索之前的堆栈。
  3. 仅在 NavigateTo 上执行 #2 中的相同操作
  4. 使用区域?

【问题讨论】:

    标签: xaml prism prism-4


    【解决方案1】:

    一种方法是在导航模式为“返回”时在 SearchPage.OnNavigatedTo 事件上导航.GoBack()。

    public override async void OnNavigatedTo(object navigationParameter, Windows.UI.Xaml.Navigation.NavigationMode navigationMode, System.Collections.Generic.Dictionary<string, object> viewModelState)
    {
    
            if (navigationMode != NavigationMode.Back)
            {
                base.OnNavigatedTo(navigationParameter, navigationMode, viewModelState);
                // ... and so on ...
            }
            else
            {
                if (this.navigationService.CanGoBack())
                {
                    // this call must be run on the dispatcher due to using the async-void signature on this event
                    await Window.Current.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => this.navigationService.GoBack());
                }
            }
        }
    

    这里有趣的是需要使用 Dispatcher。没有它, .GoBack() 函数就会失败。我不相信这是最好的答案,但这是一个答案。

    【讨论】:

      猜你喜欢
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 2021-06-01
      相关资源
      最近更新 更多