Files
Wino-Mail/Wino.Core.WinUI/BasePage.cs
T

96 lines
2.7 KiB
C#
Raw Normal View History

2024-04-18 01:44:37 +02:00
using System;
using System.Diagnostics;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
2025-09-29 11:16:14 +02:00
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Navigation;
2024-11-10 23:28:25 +01:00
using Wino.Core.ViewModels;
using Wino.Messaging.Client.Shell;
2024-04-18 01:44:37 +02:00
2025-09-29 11:23:44 +02:00
namespace Wino.Core.WinUI;
2025-02-16 11:54:23 +01:00
public partial class BasePage : Page, IRecipient<LanguageChanged>
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
public UIElement ShellContent
2024-04-18 01:44:37 +02:00
{
2025-02-16 11:54:23 +01:00
get { return (UIElement)GetValue(ShellContentProperty); }
set { SetValue(ShellContentProperty, value); }
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public static readonly DependencyProperty ShellContentProperty = DependencyProperty.Register(nameof(ShellContent), typeof(UIElement), typeof(BasePage), new PropertyMetadata(null));
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public void Receive(LanguageChanged message)
{
OnLanguageChanged();
2025-02-16 11:43:30 +01:00
}
2024-11-10 23:28:25 +01:00
2025-02-16 11:54:23 +01:00
public virtual void OnLanguageChanged() { }
/// <summary>
/// Register message recipients for this page. Override to register specific message types.
/// </summary>
protected virtual void RegisterRecipients() { }
/// <summary>
/// Unregister message recipients for this page. Override to unregister specific message types.
/// </summary>
protected virtual void UnregisterRecipients() { }
2025-02-16 11:54:23 +01:00
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
public abstract class BasePage<T> : BasePage where T : CoreBaseViewModel
{
public T ViewModel { get; } = WinoApplication.Current.Services.GetService<T>();
2024-11-10 23:28:25 +01:00
2025-02-16 11:54:23 +01:00
protected BasePage()
{
2025-09-29 11:16:14 +02:00
ViewModel.Dispatcher = new WinUIDispatcher(DispatcherQueue);
2024-11-10 23:28:25 +01:00
2025-02-16 11:54:23 +01:00
Loaded += PageLoaded;
Unloaded += PageUnloaded;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
private void PageUnloaded(object sender, RoutedEventArgs e)
{
Loaded -= PageLoaded;
Unloaded -= PageUnloaded;
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
private void PageLoaded(object sender, RoutedEventArgs e) => ViewModel.OnPageLoaded();
2024-04-18 01:44:37 +02:00
~BasePage() { Debug.WriteLine($"Disposed {GetType().Name}"); }
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
var mode = GetNavigationMode(e.NavigationMode);
var parameter = e.Parameter;
2024-04-18 01:44:37 +02:00
2025-10-03 21:13:26 +02:00
WeakReferenceMessenger.Default.Register<LanguageChanged>(this);
RegisterRecipients();
2025-02-16 11:35:43 +01:00
2025-02-16 11:54:23 +01:00
ViewModel.OnNavigatedTo(mode, parameter);
}
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
var mode = GetNavigationMode(e.NavigationMode);
var parameter = e.Parameter;
2024-04-18 01:44:37 +02:00
WeakReferenceMessenger.Default.Unregister<LanguageChanged>(this);
UnregisterRecipients();
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
ViewModel.OnNavigatedFrom(mode, parameter);
2024-04-18 01:44:37 +02:00
2025-02-16 11:54:23 +01:00
GC.Collect();
}
2025-02-16 11:43:30 +01:00
2025-02-16 11:54:23 +01:00
private Domain.Models.Navigation.NavigationMode GetNavigationMode(NavigationMode mode)
{
return (Domain.Models.Navigation.NavigationMode)mode;
2024-04-18 01:44:37 +02:00
}
}