Таким образом, на этом изображении, которое содержит рамку, в которой должны отображаться страницы (страницы с текущим отображением являются текущим источником родительской страницы)
и я нашел этот репозиторий , просто для использования службы навигации, однако, он использует только RootFrame
. поэтому я сделал некоторые изменения
// INavigationService.cs
interface INavigationService
{
string CurrentPageKey { get; }
void GoBack();
void NavigateTo(string frame, string pageKey);
void NavigateTo(string frame, string pageKey, object parameter);
}
// FrameNavigationService.cs
public virtual void NavigateTo(string frameName, string key, object parameter)
{
...
if(GetDescendantFromName(Application.Current.MainWindow, frameName) is Frame frame)
...
}
и использовал этот код:
// MainViewModel
public RelayCommand LoadPage1Command
=> loadPage1Command ?? (loadPage1Command = new RelayCommand(() => navigationService.NavigateTo("Page1")));
// Page1ViewModel
public RelayCommand LoadedCommand
=> loadedCommand ?? (loadedCommand = new RelayCommand(() => navigationService.NavigateTo("Page1_Frame", "Page1_1")));
Я не могу сказать, является ли это способом навигации по странице внутри фрейма. Существуют ли какие-либо шаблоны проектирования поведения, которые я мог бы использовать в качестве альтернативы этому, если измененный код плохой?