diff --git a/src/AvaloniaInside.Shell/BindingNavigate.cs b/src/AvaloniaInside.Shell/BindingNavigate.cs index ea14e32..d27afe8 100644 --- a/src/AvaloniaInside.Shell/BindingNavigate.cs +++ b/src/AvaloniaInside.Shell/BindingNavigate.cs @@ -31,40 +31,40 @@ public event EventHandler? CanExecuteChanged public async Task ExecuteAsync(object? parameter, CancellationToken cancellationToken) { - if (Sender is not Visual visual) return; - if (visual.FindAncestorOfType() is not { } shell) return; + if (Sender is not Visual visual) return; + if (visual.FindAncestorOfType() is not { } shell) return; - _singletonCanExecute = false; + _singletonCanExecute = false; + _singletonCanExecuteChanged?.Invoke(this, EventArgs.Empty); + try + { + if (parameter != null) + await shell.Navigator.NavigateAsync( + Path, + Type, + parameter, + Sender, + true, + Transition, + cancellationToken); + else + await shell.Navigator.NavigateAsync( + Path, + Type, + Sender, + true, + Transition, + cancellationToken); + } + finally + { + _singletonCanExecute = true; _singletonCanExecuteChanged?.Invoke(this, EventArgs.Empty); - try - { - if (parameter != null) - await shell.Navigator.NavigateAsync( - Path, - Type, - parameter, - Sender, - true, - Transition, - cancellationToken); - else - await shell.Navigator.NavigateAsync( - Path, - Type, - Sender, - true, - Transition, - cancellationToken); - } - finally - { - _singletonCanExecute = true; - _singletonCanExecuteChanged?.Invoke(this, EventArgs.Empty); - } } + } public static implicit operator BindingNavigate(string path) => new BindingNavigate { Path = path }; -} \ No newline at end of file +} diff --git a/src/AvaloniaInside.Shell/DefaultNavigationUpdateStrategy.cs b/src/AvaloniaInside.Shell/DefaultNavigationUpdateStrategy.cs index e86bdbb..3019542 100644 --- a/src/AvaloniaInside.Shell/DefaultNavigationUpdateStrategy.cs +++ b/src/AvaloniaInside.Shell/DefaultNavigationUpdateStrategy.cs @@ -51,7 +51,7 @@ public async Task UpdateChangesAsync( await newInstanceLifecycle.ArgumentAsync(argument, cancellationToken); } - if (!isSame && changes.Front != null) + if (!isSame && changes.Front != null && navigateType != NavigateType.Pop) await _presenterProvider.For(navigateType).PresentAsync(shellView, changes.Front, navigateType, cancellationToken); }