Back to Devexpress

NavigationViewModelBase Class

corelibraries-devexpress-dot-mvvm-731eb468.md

latest11.0 KB
Original Source

NavigationViewModelBase Class

A View Model for Views between which navigation can be organized if they are placed within a NavigationFrame.

Namespace : DevExpress.Mvvm

Assembly : DevExpress.Mvvm.v25.2.dll

NuGet Packages : DevExpress.Mvvm, DevExpress.Win.Navigation

Declaration

csharp
public abstract class NavigationViewModelBase :
    ViewModelBase,
    ISupportNavigation,
    ISupportParameter
vb
Public MustInherit Class NavigationViewModelBase
    Inherits ViewModelBase
    Implements ISupportNavigation,
               ISupportParameter

Remarks

The NavigationViewModelBase class implements the ISupportNavigation interface, which adds the OnNavigatedTo and OnNavigatedFrom methods to the class. When deriving your ViewModel from the NavigationViewModelBase class, you can override these methods to perform actions when a View is activated or deactivated during navigation.

Example

The FrameNavigationService provides methods to navigate between Views within a NavigationFrame. This example shows how to use this service.In this example, the MainWindow contains a NavigationFrame, which shows a HomeView at startup. The HomeView contains a Tile, which invokes a command to navigate to a DetailView when clicked. The DetailView contains the Back button for backward navigation.

Note

A complete sample project is available at https://github.com/DevExpress-Examples/wpf-mvvm-framework-use-framenavigationservice-to-navigate-between-views-from-the-view-model

xaml
<UserControl x:Class="DXSample.View.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui"
    xmlns:dxwuin="http://schemas.devexpress.com/winfx/2008/xaml/windowsui/navigation"
    xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" 
    xmlns:ViewModel="clr-namespace:DXSample.ViewModel" 
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" 
    DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModel:MainViewModel}}">
    <Grid>
        <dxwui:NavigationFrame AnimationType="SlideHorizontal" NavigationCacheMode="Required">
            <dxmvvm:Interaction.Triggers>
                <dxmvvm:EventToCommand EventName="Loaded" Command="{Binding OnViewLoadedCommand}" />
            </dxmvvm:Interaction.Triggers>
            <dxmvvm:Interaction.Behaviors>
                <dxwuin:FrameNavigationService />
            </dxmvvm:Interaction.Behaviors>
        </dxwui:NavigationFrame>
    </Grid>
</UserControl>
csharp
using DevExpress.Mvvm;
using DevExpress.Mvvm.POCO;

namespace DXSample.ViewModel {
    public class MainViewModel {
        private INavigationService NavigationService { get { return this.GetService<INavigationService>(); } }

        public MainViewModel() { }

        public void OnViewLoaded() {
            NavigationService.Navigate("HomeView", null, this);
        }
    }
}
xaml
<UserControl x:Class="DXSample.View.HomeView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:lc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" 
    xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" 
    xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui"
    xmlns:ViewModel="clr-namespace:DXSample.ViewModel" 
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" 
    DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModel:HomeViewModel}}">
        <dxwui:PageAdornerControl Header="Home View">
            <lc:TileLayoutControl>
                <lc:Tile Size="Small" Command="{Binding NavigateDetailsCommand}">
                    <TextBlock Text="Details" HorizontalAlignment="Center" VerticalAlignment="Center" />
                </lc:Tile>
            </lc:TileLayoutControl>
        </dxwui:PageAdornerControl>
</UserControl>
csharp
using DevExpress.Mvvm;
using DevExpress.Mvvm.POCO;

namespace DXSample.ViewModel {
    public class DetailViewModel {
        private INavigationService NavigationService { get { return this.GetService<INavigationService>(); } }
        public void NavigateNextDetail() {
            NavigationService.Navigate("NextDetailView", null, this);
        }
        public void NavigateBack() {
            NavigationService.GoBack();
        }
        public bool CanNavigateBack() {
            return NavigationService.CanGoBack;
        }
        public void NavigateForward() {
            NavigationService.GoForward();
        }
        public bool CanNavigateForward() {
            return NavigationService != null && NavigationService.CanGoForward;
        }
    }
}
xaml
<UserControl x:Class="DXSample.View.DetailView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui"
    xmlns:dxwuii="http://schemas.devexpress.com/winfx/2008/xaml/windowsui/internal"
    xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" 
    xmlns:ViewModel="clr-namespace:DXSample.ViewModel" 
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" 
    DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModel:DetailViewModel}}">
    <Grid>
        <dxwui:PageAdornerControl Header="Detail View">
            <dxwui:PageAdornerControl.HeaderTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding}" />
                        <Button Grid.Column="1" Content="Go Forward" HorizontalAlignment="Right" FontSize="14" Command="{Binding DataContext.NavigateForwardCommand, RelativeSource={RelativeSource AncestorType=dxwuii:NavigationHeaderControl}}" />
                    </Grid>
                </DataTemplate>
            </dxwui:PageAdornerControl.HeaderTemplate>
            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Content="Next Detail View" Padding="4" Margin="2" Command="{Binding NavigateNextDetailCommand}"/>
        </dxwui:PageAdornerControl>
    </Grid>
</UserControl>
csharp
using DevExpress.Mvvm;
using DevExpress.Mvvm.POCO;

namespace DXSample.ViewModel {
    public class HomeViewModel {
        private INavigationService NavigationService { get { return this.GetService<INavigationService>(); } }

        public HomeViewModel() { }

        public void NavigateDetails() {
            NavigationService.Navigate("DetailView", null, this);
        }
    }
}
vb
Imports Microsoft.VisualBasic
Imports System
Imports DevExpress.Mvvm
Imports DevExpress.Mvvm.POCO

Namespace DXSample.ViewModel
    Public Class HomeViewModel
        Private ReadOnly Property NavigationService() As INavigationService
            Get
                Return Me.GetService(Of INavigationService)()
            End Get
        End Property

        Public Sub New()
        End Sub

        Public Sub NavigateDetails()
            NavigationService.Navigate("DetailView", Nothing, Me)
        End Sub
    End Class
End Namespace
vb
Imports Microsoft.VisualBasic
Imports System
Imports DevExpress.Mvvm
Imports DevExpress.Mvvm.POCO

Namespace DXSample.ViewModel
    Public Class MainViewModel
        Private ReadOnly Property NavigationService() As INavigationService
            Get
                Return Me.GetService(Of INavigationService)()
            End Get
        End Property

        Public Sub New()
        End Sub

        Public Sub OnViewLoaded()
            NavigationService.Navigate("HomeView", Nothing, Me)
        End Sub
    End Class
End Namespace
vb
Imports Microsoft.VisualBasic
Imports System
Imports DevExpress.Mvvm
Imports DevExpress.Mvvm.POCO

Namespace DXSample.ViewModel
    Public Class DetailViewModel
        Private ReadOnly Property NavigationService() As INavigationService
            Get
                Return Me.GetService(Of INavigationService)()
            End Get
        End Property
        Public Sub NavigateNextDetail()
            NavigationService.Navigate("NextDetailView", Nothing, Me)
        End Sub
        Public Sub NavigateBack()
            NavigationService.GoBack()
        End Sub
        Public Function CanNavigateBack() As Boolean
            Return NavigationService.CanGoBack
        End Function
        Public Sub NavigateForward()
            NavigationService.GoForward()
        End Sub
        Public Function CanNavigateForward() As Boolean
            Return NavigationService IsNot Nothing AndAlso NavigationService.CanGoForward
        End Function
    End Class
End Namespace

Implements

ISupportParentViewModel

ISupportServices

ISupportNavigation

ISupportParameter

Inheritance

Object BindableBase ViewModelBase NavigationViewModelBase

See Also

NavigationViewModelBase Members

DevExpress.Mvvm Namespace