diff --git a/src/Codebreaker.WPF/Helpers/PageExtensions.cs b/src/Codebreaker.WPF/Helpers/PageExtensions.cs new file mode 100644 index 00000000..3e4361cf --- /dev/null +++ b/src/Codebreaker.WPF/Helpers/PageExtensions.cs @@ -0,0 +1,31 @@ +using CommunityToolkit.Mvvm.Messaging; + +namespace Codebreaker.WPF.Helpers; + +internal static class PageExtensions +{ + public static void UnregisterAllOnUnloaded(this IMessenger messenger, FrameworkElement page) => + messenger.UnregisterAllOnUnloaded(page, page); + + public static void UnregisterAllOnUnloaded(this IMessenger messenger, FrameworkElement page, object messageRecepient) + { + void UnloadedCallback(object sender, RoutedEventArgs args) + { + messenger.UnregisterAll(messageRecepient); + page.Unloaded -= UnloadedCallback; + } + + page.Unloaded += UnloadedCallback; + } + + public static void CallOnceOnUnloaded(this FrameworkElement page, Action action) + { + void Callback(object sender, RoutedEventArgs args) + { + action?.Invoke(sender, args); + page.Unloaded -= Callback; + } + + page.Unloaded += Callback; + } +} diff --git a/src/Codebreaker.WPF/Views/Pages/GamePage.xaml b/src/Codebreaker.WPF/Views/Pages/GamePage.xaml index b2852d29..24921a62 100644 --- a/src/Codebreaker.WPF/Views/Pages/GamePage.xaml +++ b/src/Codebreaker.WPF/Views/Pages/GamePage.xaml @@ -15,10 +15,7 @@ - -