Files
ShrlAlgoToolkit/WPFluent.Gallery/ViewModels/Pages/SettingsViewModel.cs

74 lines
2.2 KiB
C#
Raw Normal View History

2025-04-24 20:56:44 +08:00
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT.
// Copyright (C) Leszek Pomianowski and WPF UI Contributors.
// All Rights Reserved.
using System.Reflection;
using System.Windows.Media;
using WPFluent.Appearance;
using WPFluent.Controls;
using WPFluent.Extensions;
namespace WPFluent.Gallery.ViewModels.Pages;
public sealed partial class SettingsViewModel(INavigationService navigationService) : ViewModel
{
private bool _isInitialized = false;
[ObservableProperty]
private string _appVersion = string.Empty;
[ObservableProperty]
private ApplicationTheme _currentApplicationTheme = ApplicationTheme.Unknown;
[ObservableProperty]
private NavigationViewPaneDisplayMode _currentApplicationNavigationStyle =
NavigationViewPaneDisplayMode.Left;
public override void OnNavigatedTo()
{
if (!_isInitialized)
{
InitializeViewModel();
}
}
partial void OnCurrentApplicationThemeChanged(ApplicationTheme oldValue, ApplicationTheme newValue)
{
ApplicationThemeManager.Apply(newValue);
}
partial void OnCurrentApplicationNavigationStyleChanged(
NavigationViewPaneDisplayMode oldValue,
NavigationViewPaneDisplayMode newValue
)
{
_ = navigationService.SetPaneDisplayMode(newValue);
}
private void InitializeViewModel()
{
CurrentApplicationTheme = ApplicationThemeManager.GetAppTheme();
AppVersion = $"{GetAssemblyVersion()}";
ApplicationThemeManager.Changed += OnThemeChanged;
_isInitialized = true;
}
private void OnThemeChanged(ApplicationTheme currentApplicationTheme, Color systemAccent)
{
// Update the theme if it has been changed elsewhere than in the settings.
if (CurrentApplicationTheme != currentApplicationTheme)
{
CurrentApplicationTheme = currentApplicationTheme;
}
}
private static string GetAssemblyVersion()
{
return Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? string.Empty;
}
}