private void OnNavigated(object sender, NavigationEventArgs args)
        {
            _lastParameter = null;
            var handler = Navigated;
            if (handler == null)
                return;

            var dp = args.Content as DependencyObject;
            if (dp == null)
                handler(this, new NavigationEventArgsWrapper(args));
            else
            {
                //to indicate that args is handled.
                args.SetHandled(true);
                //to restore state before navigate.
                dp.Dispatcher.RunAsync(CoreDispatcherPriority.Low,
                    () => handler(this, new NavigationEventArgsWrapper(args)));
            }
        }
        private void OnNavigated(object sender, NavigationEventArgs args)
        {
            var bringToFront = _bringToFront;
            _lastParameter = null;
            _bringToFront = false;
            var handler = Navigated;
            if (handler == null)
                return;

            var dp = args.Content as DependencyObject;
            if (dp == null)
                handler(this, new NavigationEventArgsWrapper(args, bringToFront));
            else
            {
                //to indicate that args is handled.
                args.SetHandled(true);
                //to restore state before navigate.
                dp.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => handler(this, new NavigationEventArgsWrapper(args, bringToFront)));
            }
            if (!bringToFront)
                return;
            var id = GetViewModelIdFromParameter(args.Parameter);
            for (int index = 0; index < _frame.BackStack.Count; index++)
            {
                if (GetViewModelIdFromParameter(_frame.BackStack[index].Parameter) == id)
                {
                    _frame.BackStack.RemoveAt(index);
                    --index;
                    break;
                }
            }
        }