BaconographyWP8Core.Common.FlipViewUtility.FlickHandler C# (CSharp) Method

FlickHandler() public static method

public static FlickHandler ( object sender, Microsoft.Phone.Controls.FlickGestureEventArgs e, ViewModelBase currentViewModel, UIElement rootPage ) : void
sender object
e Microsoft.Phone.Controls.FlickGestureEventArgs
currentViewModel ViewModelBase
rootPage System.Windows.UIElement
return void
        public static async void FlickHandler(object sender, FlickGestureEventArgs e, ViewModelBase currentViewModel, UIElement rootPage)
        {
            try
            {
                if (_flicking || currentViewModel == null)
                    return;

                if (e.Direction == System.Windows.Controls.Orientation.Vertical)
                {
                    //Up
                    if (e.VerticalVelocity < -1500)
                    {
                        _flicking = true;
                        try
                        {
                            using (ServiceLocator.Current.GetInstance<ISuspendableWorkQueue>().HighValueOperationToken)
                            {
                                var next = await StreamViewUtility.Next(GetLinkViewModel(currentViewModel), currentViewModel);
                                if (next != null)
                                {
                                    TransitionService.SetNavigationOutTransition(rootPage,
                                        new NavigationOutTransition()
                                        {
                                            Forward = new SlideTransition()
                                            {
                                                Mode = SlideTransitionMode.SlideUpFadeOut
                                            }
                                        }
                                    );
                                    if (next is LinkedPictureViewModel)
                                    {
                                        ServiceLocator.Current.GetInstance<INavigationService>().Navigate(typeof(LinkedPictureView), MakeSerializable(next as LinkedPictureViewModel));
                                    }
                                    else if (next is ReadableArticleViewModel)
                                    {
                                        ServiceLocator.Current.GetInstance<INavigationService>().Navigate(typeof(LinkedReadabilityView), MakeSerializable(next as ReadableArticleViewModel));
                                    }
                                    else if (next is LinkViewModel)
                                    {
                                        ServiceLocator.Current.GetInstance<INavigationService>().Navigate(typeof(LinkedSelfTextPageView), MakeSerializable(next as LinkViewModel));
                                    }
                                }
                            }
                        }
                        finally
                        {
                            _flicking = false;
                        }


                    }
                    else if (e.VerticalVelocity > 1500) //Down
                    {
                        _flicking = true;
                        try
                        {
                            using (ServiceLocator.Current.GetInstance<ISuspendableWorkQueue>().HighValueOperationToken)
                            {
                                var previous = await StreamViewUtility.Previous(GetLinkViewModel(currentViewModel), currentViewModel);
                                if (previous is LinkedPictureViewModel)
                                {
                                    ServiceLocator.Current.GetInstance<INavigationService>().Navigate(typeof(LinkedPictureView), MakeSerializable(previous as LinkedPictureViewModel));
                                }
                                else if (previous is ReadableArticleViewModel)
                                {
                                    ServiceLocator.Current.GetInstance<INavigationService>().Navigate(typeof(LinkedReadabilityView), MakeSerializable(previous as ReadableArticleViewModel));
                                }
                                else if (previous is LinkViewModel)
                                {
                                    ServiceLocator.Current.GetInstance<INavigationService>().Navigate(typeof(LinkedSelfTextPageView), MakeSerializable(previous as LinkViewModel));
                                }
                            }
                        }
                        finally
                        {
                            _flicking = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }
    }