如何防止视图放在Prism的导航堆栈中

时间:2013-09-11 20:48:17

标签: xaml prism prism-4

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

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

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

我看到了几种可能性:

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

1 个答案:

答案 0 :(得分:0)

当导航模式为“返回”时,一种方法是在SearchPage.OnNavigatedTo事件上navigation.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()函数就会失败。我不相信这是最好的答案,但这是一个答案。