mirror of
https://github.com/real-zony/ZonyLrcToolsX.git
synced 2026-02-02 17:18:26 +00:00
feat: Create a new GUI project based on Avalonia. (Powered by Claude)
This commit is contained in:
72
src/ZonyLrcTools.Desktop/ViewModels/MainWindowViewModel.cs
Normal file
72
src/ZonyLrcTools.Desktop/ViewModels/MainWindowViewModel.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using ZonyLrcTools.Desktop.Infrastructure.Localization;
|
||||
using ZonyLrcTools.Desktop.Services;
|
||||
|
||||
namespace ZonyLrcTools.Desktop.ViewModels;
|
||||
|
||||
public partial class MainWindowViewModel : ViewModelBase
|
||||
{
|
||||
private readonly IThemeService _themeService;
|
||||
private readonly IUILocalizationService _localization;
|
||||
|
||||
[ObservableProperty]
|
||||
private ViewModelBase? _currentPage;
|
||||
|
||||
[ObservableProperty]
|
||||
private int _selectedNavigationIndex;
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ThemeButtonText))]
|
||||
private bool _isDarkTheme;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _title = "ZonyLrcTools X";
|
||||
|
||||
// Navigation localized strings
|
||||
public string NavHome => _localization["Nav_Home"];
|
||||
public string NavLyricsDownload => _localization["Nav_LyricsDownload"];
|
||||
public string NavAlbumDownload => _localization["Nav_AlbumDownload"];
|
||||
public string NavSettings => _localization["Nav_Settings"];
|
||||
public string HomeDescription => _localization["Home_Description"];
|
||||
|
||||
public string ThemeButtonText => IsDarkTheme
|
||||
? _localization["Settings_ThemeLight"]
|
||||
: _localization["Settings_ThemeDark"];
|
||||
|
||||
public MainWindowViewModel(
|
||||
IThemeService themeService,
|
||||
IUILocalizationService localization,
|
||||
HomeViewModel homeViewModel)
|
||||
{
|
||||
_themeService = themeService;
|
||||
_localization = localization;
|
||||
|
||||
// Subscribe to language changes
|
||||
_localization.LanguageChanged += OnLanguageChanged;
|
||||
|
||||
// Set initial page
|
||||
CurrentPage = homeViewModel;
|
||||
SelectedNavigationIndex = 0;
|
||||
}
|
||||
|
||||
private void OnLanguageChanged(object? sender, EventArgs e)
|
||||
{
|
||||
// Notify all localized properties have changed
|
||||
OnPropertyChanged(nameof(NavHome));
|
||||
OnPropertyChanged(nameof(NavLyricsDownload));
|
||||
OnPropertyChanged(nameof(NavAlbumDownload));
|
||||
OnPropertyChanged(nameof(NavSettings));
|
||||
OnPropertyChanged(nameof(HomeDescription));
|
||||
OnPropertyChanged(nameof(ThemeButtonText));
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ToggleTheme()
|
||||
{
|
||||
IsDarkTheme = !IsDarkTheme;
|
||||
_themeService.SetTheme(IsDarkTheme
|
||||
? Avalonia.Styling.ThemeVariant.Dark
|
||||
: Avalonia.Styling.ThemeVariant.Light);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user