0

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

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

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

我看到了几种可能性:

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

1 回答 1

0

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

于 2013-09-12T00:06:41.207 回答