I've had similar design issues in a Navigation based WPF application. My solution was to define Action commands on the ViewModel and Navigation commands on the View, or for global Navigations as commands on the NavigationWindow that hosts everything.
In some cases, e.g. where an interaction results in both an action and a navigation, I have my View level command calling my ViewModel command and then Navigating to finish the action.
I'm not sure I'm entirely happy with this method, while it is successful in achieving my goals it just feels wrong. If you find a better solution I'd be very interested
Example button resulting in a navigation
<Button Style="{StaticResource HyperLinkButtonStyle}"
Command="{Binding GoCurrentCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=View:MainWindow, AncestorLevel=1}}"
Content="Details"/>
Normal button with action
<Button
Style="{StaticResource HyperLinkButtonStyle}"
Command="{Binding CompleteCommand}"
Content="Complete"/>
Here's an example view level command with delegation to the ViewModel (note the use of ReactiveUI, so the syntax might not be quite what you are used to)
public class MainWindow : NavigationWindow
{
...
//This defines when the command can be run
this._completeCommand = new ReactiveCommand(((SolutionViewModel)DataContext).CompleteCommand.CanExecuteObservable);
//This defines what to do when the command is run
this._completeCommand.Subscribe(
_ =>
{
((SolutionViewModel)DataContext).CompleteCommand.Execute(null);
this.NavigationService.Navigate(new IntentionsListPage { DataContext = this.DataContext });
});