2024-04-18 01:44:37 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
using Windows.UI.Xaml;
|
|
|
|
|
|
using Windows.UI.Xaml.Controls;
|
|
|
|
|
|
using Windows.UI.Xaml.Navigation;
|
2024-11-10 23:28:25 +01:00
|
|
|
|
using Wino.Core.ViewModels;
|
2024-08-05 00:36:26 +02:00
|
|
|
|
using Wino.Messaging.Client.Shell;
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
namespace Wino.Core.UWP;
|
|
|
|
|
|
|
|
|
|
|
|
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() { }
|
|
|
|
|
|
}
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
ViewModel.Dispatcher = new UWPDispatcher(Dispatcher);
|
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
|
|
|
|
|
2025-02-16 11:54:23 +01: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-02-16 11:54:23 +01:00
|
|
|
|
WeakReferenceMessenger.Default.UnregisterAll(this);
|
|
|
|
|
|
WeakReferenceMessenger.Default.RegisterAll(this);
|
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
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
WeakReferenceMessenger.Default.UnregisterAll(this);
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|