检测是否在NavigationContext中调用了GoBack()

时间:2012-03-14 18:17:40

标签: c# .net wpf prism

在实现IConfirmNavigationRequest的视图中,我使用了四个导航过渡动画:ForwardIn,ForwardOut,BackwardIn和BackwardOut。

我正在使用ConfirmNavigationRequest在导航之前等待Out过渡完成。但是,根据导航的类型 - 使用RequestNavigate()向前或使用GoBack()向后 - 我想播放不同的故事板:

    public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
    {
        Storyboard storyboard;

        if (navigationContext./* was RequestNavigate() or GoBack() called? */)
        {
            // GoBack navigation request.
            storyboard = ((Storyboard)FindResource(RegionTransitions.BackwardOut));
        }
        else
        {
            // Forward navigation request.
            storyboard = ((Storyboard)FindResource(RegionTransitions.ForwardOut));
        }

        storyboard.Completed += (sender, args) => continuationCallback(true);
        storyboard.Begin();
    }

是否有任何准确且可预测的方法来检测NavigationContext中使用的导航类型?

编辑:我已经放弃使用IConfirmNavigation进行转换,现在正在使用AnimatedContentControl。

我真的不喜欢它,但是我发布了一个事件'警告'AnimatedContentControl,下一个导航应该使用特定的过渡:

_eventAggregator.GetEvent<RegionTransitionEvent>().Publish(new RegionTransitionEventArgs { RegionName = RegionNames.NavRegion, RegionTransition = RegionTransitions.BackwardIn });

_regionManager.RequestNavigate(RegionNames.ContentRegion, ViewNames.ABC);

1 个答案:

答案 0 :(得分:1)

您可以在视图或视图模型中实现INavigationAware界面。

此界面将实现3种方法。

public interface INavigationAware
{
    void OnNavigatedTo(NavigationContext navigationContext);
    bool IsNavigationTarget(NavigationContext navigationContext);
    void OnNavigatedFrom(NavigationContext navigationContext);
}

将允许您确定它是否是某个地方的导航。您甚至可以确定导航来自哪个视图。