From f504c155fd46ea199c50aeb658c0c9c230669b1c Mon Sep 17 00:00:00 2001 From: Easley Date: Tue, 3 Jun 2025 11:39:51 +0800 Subject: [PATCH] add ICanUnload --- .../BaseNavigationViewModel.cs | 2 +- .../Regions/Region.cs | 18 ++++++++++++------ .../Regions/Region.cs | 9 ++++++--- .../Abstractions/ICanUnload.cs | 6 ++++++ .../Abstractions/INavigationAware.cs | 1 - 5 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 src/Lemon.ModuleNavigation/Abstractions/ICanUnload.cs diff --git a/samples/Lemon.ModuleNavigation.SampleViewModel/BaseNavigationViewModel.cs b/samples/Lemon.ModuleNavigation.SampleViewModel/BaseNavigationViewModel.cs index 670d887..6ea7573 100644 --- a/samples/Lemon.ModuleNavigation.SampleViewModel/BaseNavigationViewModel.cs +++ b/samples/Lemon.ModuleNavigation.SampleViewModel/BaseNavigationViewModel.cs @@ -5,7 +5,7 @@ namespace Lemon.ModuleNavigation.SampleViewModel; -public class BaseNavigationViewModel : ReactiveObject, INavigationAware +public class BaseNavigationViewModel : ReactiveObject, INavigationAware, ICanUnload { public virtual string Greeting => $"Welcome to {GetType().Name}[{Environment.ProcessId}][{Environment.CurrentManagedThreadId}]{Environment.NewLine}{DateTime.Now:yyyy-MM-dd HH-mm-ss.ffff}"; diff --git a/src/Lemon.ModuleNavigation.Avaloniaui/Regions/Region.cs b/src/Lemon.ModuleNavigation.Avaloniaui/Regions/Region.cs index 58377d5..2899252 100644 --- a/src/Lemon.ModuleNavigation.Avaloniaui/Regions/Region.cs +++ b/src/Lemon.ModuleNavigation.Avaloniaui/Regions/Region.cs @@ -80,10 +80,13 @@ public virtual void ScrollIntoView(NavigationContext item) view.DataContext = navigationAware; navigationAware.OnNavigatedTo(context); - navigationAware.RequestUnload += () => + if (navigationAware is ICanUnload canUnloadNavigationAware) { - DeActivate(context); - }; + canUnloadNavigationAware.RequestUnload += () => + { + DeActivate(context); + }; + } Current.SetData((view, navigationAware)); context.View = view; ViewCache.AddOrUpdate(context, view, (key, value) => view); @@ -137,10 +140,13 @@ private IDataTemplate CreateRegionDataTemplate() view.DataContext = navigationAware; navigationAware.OnNavigatedTo(context); - navigationAware.RequestUnload += () => + if (navigationAware is ICanUnload canUnloadNavigationAware) { - DeActivate(context); - }; + canUnloadNavigationAware.RequestUnload += () => + { + DeActivate(context); + }; + } Current.SetData((view, navigationAware)); context.View = view; ViewCache.AddOrUpdate(context, view, (key, value) => view); diff --git a/src/Lemon.ModuleNavigation.Wpf/Regions/Region.cs b/src/Lemon.ModuleNavigation.Wpf/Regions/Region.cs index 5948264..ed19e79 100644 --- a/src/Lemon.ModuleNavigation.Wpf/Regions/Region.cs +++ b/src/Lemon.ModuleNavigation.Wpf/Regions/Region.cs @@ -80,10 +80,13 @@ public virtual void ScrollIntoView(NavigationContext item) view.DataContext = navigationAware; navigationAware.OnNavigatedTo(context); - navigationAware.RequestUnload += () => + if (navigationAware is ICanUnload canUnloadNavigationAware) { - DeActivate(context); - }; + canUnloadNavigationAware.RequestUnload += () => + { + DeActivate(context); + }; + } Current.SetData((view, navigationAware)); context.View = view; ViewCache.AddOrUpdate(context, view, (key, value) => view); diff --git a/src/Lemon.ModuleNavigation/Abstractions/ICanUnload.cs b/src/Lemon.ModuleNavigation/Abstractions/ICanUnload.cs new file mode 100644 index 0000000..a808751 --- /dev/null +++ b/src/Lemon.ModuleNavigation/Abstractions/ICanUnload.cs @@ -0,0 +1,6 @@ +namespace Lemon.ModuleNavigation.Abstractions; + +public interface ICanUnload +{ + event Action? RequestUnload; +} diff --git a/src/Lemon.ModuleNavigation/Abstractions/INavigationAware.cs b/src/Lemon.ModuleNavigation/Abstractions/INavigationAware.cs index 23d0913..f77ed78 100644 --- a/src/Lemon.ModuleNavigation/Abstractions/INavigationAware.cs +++ b/src/Lemon.ModuleNavigation/Abstractions/INavigationAware.cs @@ -2,7 +2,6 @@ public interface INavigationAware { - event Action? RequestUnload; void OnNavigatedTo(NavigationContext navigationContext); bool IsNavigationTarget(NavigationContext navigationContext); void OnNavigatedFrom(NavigationContext navigationContext);