Вы можете отобразить что угодно в NavigationWindow
, а не только Pages
. Простой способ заставить это работать - определить в ресурсах NavigationWindow
DataTemplate
для каждой ViewModel, которую вы хотите отобразить. Свяжите свойство Content
NavigationWindow
со свойством вашей основной ViewModel, и все готово: изменение этого свойства обновит содержимое NavigationWindow
, и соответствующий DataTemplate
будет выбран автоматически
UPDATE
Я только что посмотрел код моего проекта, где я использовал NavigationWindow
. На самом деле я ошибся, это не работает, связывая Content
(или, может быть, это работает, но это не то, что я сделал). Вместо этого я создал интерфейс INavigationService
, реализованный моим классом App
, который обрабатывает навигацию, вызывая метод NavigationWindow.Navigate
. Таким образом, история навигации поддерживается NavigationWindow
.
Вот выдержка из моего проекта
MainWindow.xaml:
<NavigationWindow x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MyApp.ViewModel"
xmlns:view="clr-namespace:MyApp.View"
Title="{Binding Content.DisplayName, RelativeSource={RelativeSource Self}, FallbackValue=The Title}"
Height="600" Width="800">
<NavigationWindow.Resources>
<DataTemplate DataType="{x:Type vm:HomeViewModel}">
<view:HomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:CustomerViewModel}">
<view:CustomerView />
</DataTemplate>
</NavigationWindow.Resources>
</NavigationWindow>
App.xaml.cs :
...
private void Application_Startup(object sender, StartupEventArgs e)
{
LoadConfig();
MyApp.MainWindow window = new MainWindow();
INavigationService navigationService = this;
HomeViewModel viewModel = new HomeViewModel(navigationService);
this.MainWindow = window;
window.Navigate(viewModel);
window.Show();
}
Когда мне нужно перейти к другому представлению, я просто вызываю метод Navigate
с ViewModel в качестве параметра, и WPF автоматически выбирает соответствующий DataTemplate
из ресурсов.