public void NavigateTo(NavigationEntry entry)
        {
            if (_currentEntry == entry)
            {
                return;
            }

            if (_backwardEntries.Contains(entry))
            {
                while (BackwardAvailable)
                {
                    NavigateBackward();
                    if (_currentEntry == entry)
                    {
                        break;
                    }
                }
            }
            if (_forwardEntries.Contains(entry))
            {
                while (ForwardAvailable)
                {
                    NavigateForward();
                    if (_currentEntry == entry)
                    {
                        break;
                    }
                }
            }
        }
 private void DoNavigateAction(NavigationEntry entry)
 {
     _navigationNesting++;
     try {
         entry.Action();
     } finally {
         _navigationNesting--;
     }
 }
        public void Clear()
        {
            if (_currentEntry == null)
            {
                return;
            }

            _backwardEntries.Clear();
            _forwardEntries.Clear();
            _currentEntry = null;
            _version++;
        }
        public void AddNavigationAction(NavigationEntry entry)
        {
            if (_navigationNesting >= 1)
            {
                return;
            }

            _forwardEntries.Clear();
            if (_currentEntry != null)
            {
                _backwardEntries.Push(_currentEntry);
            }
            _currentEntry = entry;
            _version++;
        }
        public void NavigateBackward()
        {
            if (_navigationNesting >= 1)
            {
                return;
            }

            if (!BackwardAvailable)
            {
                return;
            }

            if (_currentEntry != null)
            {
                _forwardEntries.Push(_currentEntry);
            }
            _currentEntry = _backwardEntries.Pop();
            DoNavigateAction(_currentEntry);
            _version++;
        }