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++; }