Определить, был ли вызван GoBack () в NavigationContext - PullRequest
3 голосов
/ 14 марта 2012

В представлении, которое реализует 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 Ответ

1 голос
/ 16 марта 2012

Вы можете реализовать интерфейс INavigationAware в вашем представлении или модели представления.

Этот интерфейс будет реализовывать 3 метода.

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

позволит вам определить, является ли он навигацией ки откуда-тоВы даже можете определить, из какого вида происходит навигация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...