From 3ac08701696efcc157500e20bfd6e36c88c4b9d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Mon, 18 May 2026 02:44:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gearTriggerPage):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=99=A8=E9=A1=B5=E9=9D=A2=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=B9=E7=94=A8=E8=A1=8C=E5=86=85?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除全局选中触发器相关的属性、回调及列表选中绑定。将编辑、删除命令改为接收当前行触发器实例作为参数,不再依赖全局选中状态。在列表每行添加操作按钮,替换原顶部工具栏的批量编辑删除功能,同时调整新增按钮布局。 --- .../View/Pages/GearTriggerPage.xaml | 100 ++++++++++-------- .../Pages/GearTriggerPageViewModel.cs | 62 ++++------- 2 files changed, 79 insertions(+), 83 deletions(-) diff --git a/BetterGenshinImpact/View/Pages/GearTriggerPage.xaml b/BetterGenshinImpact/View/Pages/GearTriggerPage.xaml index d4c4ad43..eb77dd43 100644 --- a/BetterGenshinImpact/View/Pages/GearTriggerPage.xaml +++ b/BetterGenshinImpact/View/Pages/GearTriggerPage.xaml @@ -194,6 +194,7 @@ + + @@ -234,6 +240,7 @@ + + @@ -277,6 +289,7 @@ + @@ -330,6 +343,21 @@ Text="{Binding TaskDefinitionName, TargetNullValue='未设置'}" TextTrimming="CharacterEllipsis" ToolTip="{Binding TaskDefinitionName}" /> + + + + + @@ -360,6 +388,7 @@ + @@ -401,6 +430,21 @@ Text="{Binding TaskDefinitionName, TargetNullValue='未设置'}" TextTrimming="CharacterEllipsis" ToolTip="{Binding TaskDefinitionName}" /> + + + + + @@ -430,26 +474,13 @@ - - - - - - - - + + + @@ -498,26 +528,13 @@ - - - - - - - - + + + diff --git a/BetterGenshinImpact/ViewModel/Pages/GearTriggerPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/GearTriggerPageViewModel.cs index 07edbad7..c00b3d4e 100644 --- a/BetterGenshinImpact/ViewModel/Pages/GearTriggerPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/GearTriggerPageViewModel.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using BetterGenshinImpact.Model; using BetterGenshinImpact.Model.Gear.Triggers; using BetterGenshinImpact.Service; using BetterGenshinImpact.Service.GearTask; @@ -28,12 +27,6 @@ public partial class GearTriggerPageViewModel : ViewModel [ObservableProperty] private ObservableCollection _hotkeyTriggers = new(); - [ObservableProperty] - private GearTriggerViewModel? _selectedTrigger; - - [ObservableProperty] - private GearTaskDefinitionViewModel? _selectedTaskDefinition; - public GearTriggerPageViewModel( ILogger logger, GearTriggerStorageService storageService, @@ -44,11 +37,6 @@ public partial class GearTriggerPageViewModel : ViewModel _quartzSchedulerService = quartzSchedulerService; } - partial void OnSelectedTriggerChanged(GearTriggerViewModel? value) - { - EditTriggerCommand.NotifyCanExecuteChanged(); - } - public override void OnNavigatedTo() { _ = LoadTriggersAsync(); @@ -175,7 +163,6 @@ public partial class GearTriggerPageViewModel : ViewModel }; TimedTriggers.Add(newTrigger); - SelectedTrigger = newTrigger; newTrigger.UpdateNextRunTime(); await SaveTriggersAsync(); @@ -199,70 +186,63 @@ public partial class GearTriggerPageViewModel : ViewModel }; HotkeyTriggers.Add(newTrigger); - SelectedTrigger = newTrigger; await SaveTriggersAsync(); } [RelayCommand] - private async Task DeleteTrigger() + private async Task DeleteTriggerItem(GearTriggerViewModel? trigger) { - if (SelectedTrigger == null) + if (trigger == null) { return; } - switch (SelectedTrigger.TriggerType) + switch (trigger.TriggerType) { case TriggerType.Timed: - TimedTriggers.Remove(SelectedTrigger); + TimedTriggers.Remove(trigger); break; case TriggerType.Hotkey: - HotkeyTriggers.Remove(SelectedTrigger); + HotkeyTriggers.Remove(trigger); break; } - SelectedTrigger = null; await SaveTriggersAsync(); } - private bool CanEditTrigger() + [RelayCommand] + private async Task EditTriggerItem(GearTriggerViewModel? trigger) { - return SelectedTrigger != null; - } - - [RelayCommand(CanExecute = nameof(CanEditTrigger))] - private async Task EditTrigger() - { - if (SelectedTrigger is not { } selectedTrigger) + if (trigger == null) { return; } - var dialog = AddTriggerDialog.ShowEditTriggerDialog(selectedTrigger); + var dialog = AddTriggerDialog.ShowEditTriggerDialog(trigger); if (dialog == null) { return; } - selectedTrigger.Name = dialog.TriggerName; - selectedTrigger.IsEnabled = dialog.IsEnabled; - selectedTrigger.TaskDefinitionName = dialog.SelectedTaskDefinitionName; + trigger.Name = dialog.TriggerName; + trigger.IsEnabled = dialog.IsEnabled; + trigger.TaskDefinitionName = dialog.SelectedTaskDefinitionName; - if (selectedTrigger.TriggerType == TriggerType.Timed) + if (trigger.TriggerType == TriggerType.Timed) { - selectedTrigger.CronExpression = dialog.CronExpression; - selectedTrigger.Hotkey = null; + trigger.CronExpression = dialog.CronExpression; + trigger.Hotkey = null; } - else if (selectedTrigger.TriggerType == TriggerType.Hotkey) + else if (trigger.TriggerType == TriggerType.Hotkey) { - selectedTrigger.Hotkey = dialog.SelectedHotkey; - selectedTrigger.HotkeyType = dialog.HotkeyType; - selectedTrigger.CronExpression = null; + trigger.Hotkey = dialog.SelectedHotkey; + trigger.HotkeyType = dialog.HotkeyType; + trigger.CronExpression = null; } - selectedTrigger.ModifiedTime = DateTime.Now; - selectedTrigger.UpdateNextRunTime(); + trigger.ModifiedTime = DateTime.Now; + trigger.UpdateNextRunTime(); await SaveTriggersAsync(); }