From 8c6effb1920dbac448e431a32ddb20bed271f57a Mon Sep 17 00:00:00 2001 From: DR-lin-eng <52230594+DR-lin-eng@users.noreply.github.com> Date: Thu, 13 Mar 2025 01:24:38 +0800 Subject: [PATCH] Revert "1" --- BetterGenshinImpact/App.xaml.cs | 7 +- .../BetterGenshinImpact.csproj | 7 +- .../AutoPathing/Handler/MiningHandler.cs | 1 - .../GameTask/LogParse/LogParse.cs | 2 +- .../Service/ApplicationHostService.cs | 14 ++- BetterGenshinImpact/Service/PageService.cs | 92 +++++++++---------- BetterGenshinImpact/View/MainWindow.xaml | 4 +- BetterGenshinImpact/View/MainWindow.xaml.cs | 12 ++- .../Pages/CommonSettingsPageViewModel.cs | 10 +- .../ViewModel/Pages/HomePageViewModel.cs | 10 +- .../ViewModel/Pages/JsListViewModel.cs | 8 +- .../Pages/KeyBindingsSettingsPageViewModel.cs | 10 +- .../Pages/KeyMouseRecordPageViewModel.cs | 8 +- .../Pages/MacroSettingsPageViewModel.cs | 12 ++- .../ViewModel/Pages/MapPathingViewModel.cs | 11 ++- .../ViewModel/Pages/OneDragonFlowViewModel.cs | 4 +- .../ViewModel/Pages/ScriptControlViewModel.cs | 9 +- .../Pages/TaskSettingsPageViewModel.cs | 10 +- .../Pages/TriggerSettingsPageViewModel.cs | 10 +- BetterGenshinImpact/ViewModel/ViewModel.cs | 36 -------- 20 files changed, 158 insertions(+), 119 deletions(-) delete mode 100644 BetterGenshinImpact/ViewModel/ViewModel.cs diff --git a/BetterGenshinImpact/App.xaml.cs b/BetterGenshinImpact/App.xaml.cs index 726675e9..24a268b6 100644 --- a/BetterGenshinImpact/App.xaml.cs +++ b/BetterGenshinImpact/App.xaml.cs @@ -11,6 +11,7 @@ using BetterGenshinImpact.View.Pages; using BetterGenshinImpact.ViewModel; using BetterGenshinImpact.ViewModel.Pages; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Serilog; @@ -21,9 +22,10 @@ using System.Diagnostics; using System.IO; using System.Threading.Tasks; using System.Windows; +using BetterGenshinImpact.View.Pages.View; +using BetterGenshinImpact.ViewModel.Pages.OneDragon; using BetterGenshinImpact.ViewModel.Pages.View; using Wpf.Ui; -using Wpf.Ui.DependencyInjection; using Wpf.Ui.Violeta.Controls; namespace BetterGenshinImpact; @@ -71,11 +73,10 @@ public partial class App : Application Log.Logger = loggerConfiguration.CreateLogger(); services.AddLogging(c => c.AddSerilog()); - services.AddNavigationViewPageProvider(); // App Host services.AddHostedService(); // Page resolver service - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); // Service containing navigation, same as INavigationWindow... but without window diff --git a/BetterGenshinImpact/BetterGenshinImpact.csproj b/BetterGenshinImpact/BetterGenshinImpact.csproj index 0db4b383..8cc71df9 100644 --- a/BetterGenshinImpact/BetterGenshinImpact.csproj +++ b/BetterGenshinImpact/BetterGenshinImpact.csproj @@ -75,10 +75,9 @@ - - - - + + + diff --git a/BetterGenshinImpact/GameTask/AutoPathing/Handler/MiningHandler.cs b/BetterGenshinImpact/GameTask/AutoPathing/Handler/MiningHandler.cs index a5d0affc..9c4291fe 100644 --- a/BetterGenshinImpact/GameTask/AutoPathing/Handler/MiningHandler.cs +++ b/BetterGenshinImpact/GameTask/AutoPathing/Handler/MiningHandler.cs @@ -22,7 +22,6 @@ public class MiningHandler : IActionHandler 雷泽 e(hold) 卡齐娜 e(hold),a(0.2),a(0.2),a(0.2),a(0.2) 坎蒂丝 e(hold) - 凝光 a(0.2),a(0.2),a(0.2),a(0.2),a(0.2),a(0.2),a(0.2),a(0.2) """); private readonly ScanPickTask _scanPickTask = new(); diff --git a/BetterGenshinImpact/GameTask/LogParse/LogParse.cs b/BetterGenshinImpact/GameTask/LogParse/LogParse.cs index c381b369..385434fc 100644 --- a/BetterGenshinImpact/GameTask/LogParse/LogParse.cs +++ b/BetterGenshinImpact/GameTask/LogParse/LogParse.cs @@ -91,7 +91,7 @@ namespace LogParse if (configGroupEntity != null) { - result = parseBgiLine(@"→ 开始执行(?:地图追踪任务|JS脚本): ""(.+?)""", logstr); + result = parseBgiLine(@"→ 开始执行地图追踪任务: ""(.+?)""", logstr); if (result.Item1) { configTask = new(); diff --git a/BetterGenshinImpact/Service/ApplicationHostService.cs b/BetterGenshinImpact/Service/ApplicationHostService.cs index 68933269..d940c241 100644 --- a/BetterGenshinImpact/Service/ApplicationHostService.cs +++ b/BetterGenshinImpact/Service/ApplicationHostService.cs @@ -13,10 +13,16 @@ namespace BetterGenshinImpact.Service; /// /// Managed host of the application. /// -public class ApplicationHostService(IServiceProvider serviceProvider) : IHostedService +public class ApplicationHostService : IHostedService { + private readonly IServiceProvider _serviceProvider; private INavigationWindow? _navigationWindow; + public ApplicationHostService(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + /// /// Triggered when the application host is ready to start the service. /// @@ -44,10 +50,12 @@ public class ApplicationHostService(IServiceProvider serviceProvider) : IHostedS if (!Application.Current.Windows.OfType().Any()) { - _navigationWindow = (serviceProvider.GetService(typeof(INavigationWindow)) as INavigationWindow)!; + _navigationWindow = ( + _serviceProvider.GetService(typeof(INavigationWindow)) as INavigationWindow + )!; _navigationWindow!.ShowWindow(); - _ = _navigationWindow.Navigate(typeof(HomePage)); + _navigationWindow.Navigate(typeof(HomePage)); } await Task.CompletedTask; diff --git a/BetterGenshinImpact/Service/PageService.cs b/BetterGenshinImpact/Service/PageService.cs index 411b3358..3aed2475 100644 --- a/BetterGenshinImpact/Service/PageService.cs +++ b/BetterGenshinImpact/Service/PageService.cs @@ -1,46 +1,46 @@ -// using System; -// using System.Windows; -// using Wpf.Ui; -// -// namespace BetterGenshinImpact.Service; -// -// /// -// /// Service that provides pages for navigation. -// /// -// public class PageService : IPageService -// { -// /// -// /// Service which provides the instances of pages. -// /// -// private readonly IServiceProvider _serviceProvider; -// -// /// -// /// Creates new instance and attaches the . -// /// -// public PageService(IServiceProvider serviceProvider) -// { -// _serviceProvider = serviceProvider; -// } -// -// /// -// public T? GetPage() where T : class -// { -// if (!typeof(FrameworkElement).IsAssignableFrom(typeof(T))) -// { -// throw new InvalidOperationException("The page should be a WPF control."); -// } -// -// return (T?)_serviceProvider.GetService(typeof(T)); -// } -// -// /// -// public FrameworkElement? GetPage(Type pageType) -// { -// if (!typeof(FrameworkElement).IsAssignableFrom(pageType)) -// { -// throw new InvalidOperationException("The page should be a WPF control."); -// } -// -// return _serviceProvider.GetService(pageType) as FrameworkElement; -// } -// } \ No newline at end of file +using System; +using System.Windows; +using Wpf.Ui; + +namespace BetterGenshinImpact.Service; + +/// +/// Service that provides pages for navigation. +/// +public class PageService : IPageService +{ + /// + /// Service which provides the instances of pages. + /// + private readonly IServiceProvider _serviceProvider; + + /// + /// Creates new instance and attaches the . + /// + public PageService(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + /// + public T? GetPage() where T : class + { + if (!typeof(FrameworkElement).IsAssignableFrom(typeof(T))) + { + throw new InvalidOperationException("The page should be a WPF control."); + } + + return (T?)_serviceProvider.GetService(typeof(T)); + } + + /// + public FrameworkElement? GetPage(Type pageType) + { + if (!typeof(FrameworkElement).IsAssignableFrom(pageType)) + { + throw new InvalidOperationException("The page should be a WPF control."); + } + + return _serviceProvider.GetService(pageType) as FrameworkElement; + } +} \ No newline at end of file diff --git a/BetterGenshinImpact/View/MainWindow.xaml b/BetterGenshinImpact/View/MainWindow.xaml index 8d5410dc..a97bd5bc 100644 --- a/BetterGenshinImpact/View/MainWindow.xaml +++ b/BetterGenshinImpact/View/MainWindow.xaml @@ -177,7 +177,7 @@ - + - + _logger = App.GetLogger(); public MainWindowViewModel ViewModel { get; } - public MainWindow(MainWindowViewModel viewModel, INavigationService navigationService, ISnackbarService snackbarService) + public MainWindow(MainWindowViewModel viewModel, IPageService pageService, INavigationService navigationService, ISnackbarService snackbarService) { _logger.LogDebug("主窗体实例化"); DataContext = ViewModel = viewModel; @@ -27,6 +26,7 @@ public partial class MainWindow : INavigationWindow InitializeComponent(); this.InitializeDpiAwareness(); + SetPageService(pageService); snackbarService.SetSnackbarPresenter(SnackbarPresenter); navigationService.SetNavigationControl(RootNavigation); @@ -62,8 +62,10 @@ public partial class MainWindow : INavigationWindow throw new NotImplementedException(); } - public void SetPageService(INavigationViewPageProvider navigationViewPageProvider) => - RootNavigation.SetPageProviderService(navigationViewPageProvider); + public void SetPageService(IPageService pageService) + { + RootNavigation.SetPageService(pageService); + } public void ShowWindow() => Show(); diff --git a/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs index 31c03b9f..f7750893 100644 --- a/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs @@ -27,7 +27,7 @@ using Wpf.Ui.Violeta.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class CommonSettingsPageViewModel : ViewModel +public partial class CommonSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } @@ -136,6 +136,14 @@ public partial class CommonSettingsPageViewModel : ViewModel InitializeCountries(); } + public void OnNavigatedTo() + { + } + + public void OnNavigatedFrom() + { + } + [RelayCommand] public void OnRefreshMaskSettings() { diff --git a/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs index a3936b94..f27dd987 100644 --- a/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs @@ -27,7 +27,7 @@ using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class HomePageViewModel : ViewModel +public partial class HomePageViewModel : ObservableObject, INavigationAware, IViewModel { [ObservableProperty] private string[] _modeNames = GameCaptureFactory.ModeNames(); @@ -293,6 +293,14 @@ public partial class HomePageViewModel : ViewModel UIDispatcherHelper.Invoke(() => Start(_hWnd)); } + public void OnNavigatedTo() + { + } + + public void OnNavigatedFrom() + { + } + [RelayCommand] public void OnGoToWikiUrl() { diff --git a/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs index c5528bb6..ffab9822 100644 --- a/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs @@ -21,7 +21,7 @@ using Wpf.Ui.Violeta.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class JsListViewModel : ViewModel +public partial class JsListViewModel : ObservableObject, INavigationAware, IViewModel { private readonly ILogger _logger = App.GetLogger(); private readonly string scriptPath = Global.ScriptPath(); @@ -71,11 +71,15 @@ public partial class JsListViewModel : ViewModel return di.GetDirectories(); } - public override void OnNavigatedTo() + public void OnNavigatedTo() { InitScriptListViewData(); } + public void OnNavigatedFrom() + { + } + [RelayCommand] public void OnOpenScriptsFolder() { diff --git a/BetterGenshinImpact/ViewModel/Pages/KeyBindingsSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/KeyBindingsSettingsPageViewModel.cs index ec29d681..7e185a5f 100644 --- a/BetterGenshinImpact/ViewModel/Pages/KeyBindingsSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/KeyBindingsSettingsPageViewModel.cs @@ -18,7 +18,7 @@ using static Vanara.PInvoke.User32; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class KeyBindingsSettingsPageViewModel : ViewModel +public partial class KeyBindingsSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { private readonly ILogger _logger; @@ -30,6 +30,14 @@ public partial class KeyBindingsSettingsPageViewModel : ViewModel [ObservableProperty] private ObservableCollection _keyBindingSettingModels = []; + public void OnNavigatedFrom() + { + } + + public void OnNavigatedTo() + { + } + public KeyBindingsSettingsPageViewModel(IConfigService configService, ILogger logger) { _logger = logger; diff --git a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs index 52206e70..cecf68fd 100644 --- a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs @@ -22,7 +22,7 @@ using Wpf.Ui.Violeta.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class KeyMouseRecordPageViewModel : ViewModel +public partial class KeyMouseRecordPageViewModel : ObservableObject, INavigationAware, IViewModel { private readonly ILogger _logger = App.GetLogger(); private readonly string scriptPath = Global.Absolute(@"User\KeyMouseScript"); @@ -74,11 +74,15 @@ public partial class KeyMouseRecordPageViewModel : ViewModel return files.Select(file => new FileInfo(file)).ToList(); } - public override void OnNavigatedTo() + public void OnNavigatedTo() { InitScriptListViewData(); } + public void OnNavigatedFrom() + { + } + [RelayCommand] public async Task OnStartRecord() { diff --git a/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs index 2de4ffe9..d28fc063 100644 --- a/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs @@ -11,7 +11,7 @@ using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class MacroSettingsPageViewModel : ViewModel +public partial class MacroSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } @@ -25,7 +25,15 @@ public partial class MacroSettingsPageViewModel : ViewModel Config = configService.Get(); _navigationService = navigationService; } - + + public void OnNavigatedTo() + { + } + + public void OnNavigatedFrom() + { + } + [RelayCommand] public void OnGoToHotKeyPage() { diff --git a/BetterGenshinImpact/ViewModel/Pages/MapPathingViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/MapPathingViewModel.cs index 74ef2251..4bbc3dfd 100644 --- a/BetterGenshinImpact/ViewModel/Pages/MapPathingViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/MapPathingViewModel.cs @@ -17,14 +17,17 @@ using System.Threading.Tasks; using BetterGenshinImpact.Core.Script; using BetterGenshinImpact.ViewModel.Message; using CommunityToolkit.Mvvm.Messaging; +using Wpf.Ui.Controls; using Wpf.Ui.Violeta.Controls; +using System.Windows; +using BetterGenshinImpact.GameTask; using BetterGenshinImpact.View.Pages.View; using BetterGenshinImpact.ViewModel.Pages.View; using Wpf.Ui.Violeta.Win32; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class MapPathingViewModel : ViewModel +public partial class MapPathingViewModel : ObservableObject, INavigationAware, IViewModel { private readonly ILogger _logger = App.GetLogger(); public static readonly string PathJsonPath = Global.Absolute(@"User\AutoPathing"); @@ -71,11 +74,15 @@ public partial class MapPathingViewModel : ViewModel } } - public override void OnNavigatedTo() + public void OnNavigatedTo() { InitScriptListViewData(); } + public void OnNavigatedFrom() + { + } + [RelayCommand] public void OnOpenScriptsFolder() { diff --git a/BetterGenshinImpact/ViewModel/Pages/OneDragonFlowViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/OneDragonFlowViewModel.cs index f4c01070..9ab483c0 100644 --- a/BetterGenshinImpact/ViewModel/Pages/OneDragonFlowViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/OneDragonFlowViewModel.cs @@ -28,7 +28,7 @@ using Wpf.Ui.Violeta.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class OneDragonFlowViewModel : ViewModel +public partial class OneDragonFlowViewModel : ObservableObject, INavigationAware, IViewModel { private readonly ILogger _logger = App.GetLogger(); @@ -97,7 +97,7 @@ public partial class OneDragonFlowViewModel : ViewModel InitConfigList(); } - public override void OnNavigatedTo() + public void OnNavigatedTo() { InitConfigList(); } diff --git a/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs index b5709493..e152758e 100644 --- a/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs @@ -41,7 +41,7 @@ using TextBlock = Wpf.Ui.Controls.TextBlock; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class ScriptControlViewModel : ViewModel +public partial class ScriptControlViewModel : ObservableObject, INavigationAware, IViewModel { private readonly ISnackbarService _snackbarService; @@ -63,9 +63,12 @@ public partial class ScriptControlViewModel : ViewModel public readonly string ScriptGroupPath = Global.Absolute(@"User\ScriptGroup"); public readonly string LogPath = Global.Absolute(@"log"); - - public override void OnNavigatedTo() + public void OnNavigatedFrom() + { + } + + public void OnNavigatedTo() { ReadScriptGroup(); } diff --git a/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs index af7e7409..8a2f35c5 100644 --- a/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs @@ -35,7 +35,7 @@ using Vanara.Extensions; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class TaskSettingsPageViewModel : ViewModel +public partial class TaskSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } @@ -168,6 +168,14 @@ public partial class TaskSettingsPageViewModel : ViewModel _autoFightViewModel.OnStrategyDropDownOpened(type); } + public void OnNavigatedTo() + { + } + + public void OnNavigatedFrom() + { + } + [RelayCommand] public void OnGoToHotKeyPage() { diff --git a/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs index a07efeed..918fc6e3 100644 --- a/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs @@ -14,7 +14,7 @@ using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class TriggerSettingsPageViewModel : ViewModel +public partial class TriggerSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { [ObservableProperty] private string[] _clickChatOptionNames = ["优先选择第一个选项", "随机选择选项", "优先选择最后一个选项", "不选择选项"]; @@ -51,6 +51,14 @@ public partial class TriggerSettingsPageViewModel : ViewModel } } + public void OnNavigatedTo() + { + } + + public void OnNavigatedFrom() + { + } + [RelayCommand] private void OnEditBlacklist() { diff --git a/BetterGenshinImpact/ViewModel/ViewModel.cs b/BetterGenshinImpact/ViewModel/ViewModel.cs deleted file mode 100644 index 50f639c2..00000000 --- a/BetterGenshinImpact/ViewModel/ViewModel.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Threading.Tasks; -using CommunityToolkit.Mvvm.ComponentModel; -using Wpf.Ui.Abstractions.Controls; - -namespace BetterGenshinImpact.ViewModel; - -public abstract partial class ViewModel : ObservableObject, INavigationAware, IViewModel -{ - /// - public virtual Task OnNavigatedToAsync() - { - OnNavigatedTo(); - - return Task.CompletedTask; - } - - /// - /// Handles the event that is fired after the component is navigated to. - /// - // ReSharper disable once MemberCanBeProtected.Global - public virtual void OnNavigatedTo() { } - - /// - public virtual Task OnNavigatedFromAsync() - { - OnNavigatedFrom(); - - return Task.CompletedTask; - } - - /// - /// Handles the event that is fired before the component is navigated from. - /// - // ReSharper disable once MemberCanBeProtected.Global - public virtual void OnNavigatedFrom() { } -} \ No newline at end of file