fix(ui): avoid int CommandParameter cast crash in usage monitor presets

RelayCommand<int> casts its object parameter directly rather than
converting it, so a string CommandParameter ("7"/"30") would throw
InvalidCastException at runtime. Split into two parameterless commands.
This commit is contained in:
mika kuns
2026-08-05 13:58:40 +02:00
parent 8103006e26
commit 57326f1d3b
3 changed files with 8 additions and 3 deletions
@@ -89,6 +89,11 @@ public sealed partial class UsageMonitorModalViewModel : ViewModelBase
}
[RelayCommand]
private Task SetPreset7Days() => SetPreset(7);
[RelayCommand]
private Task SetPreset30Days() => SetPreset(30);
private Task SetPreset(int days)
{
ApplyPresetRange(days);
@@ -92,9 +92,9 @@
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8" Margin="20,12,20,0">
<TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.period}" VerticalAlignment="Center"/>
<Button Classes="btn" Content="{loc:Tr modals.usageMonitor.last7Days}"
Command="{Binding SetPresetCommand}" CommandParameter="7"/>
Command="{Binding SetPreset7DaysCommand}"/>
<Button Classes="btn" Content="{loc:Tr modals.usageMonitor.last30Days}"
Command="{Binding SetPresetCommand}" CommandParameter="30"/>
Command="{Binding SetPreset30DaysCommand}"/>
<TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.fromDate}" VerticalAlignment="Center"/>
<ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/>
<TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.toDate}" VerticalAlignment="Center"/>
@@ -258,7 +258,7 @@ public class UsageMonitorModalViewModelTests
await vm.LoadAsync();
var callsAfterInitialLoad = worker.ModelUsageCalls;
await vm.SetPresetCommand.ExecuteAsync(30);
await vm.SetPreset30DaysCommand.ExecuteAsync(null);
Assert.Equal(callsAfterInitialLoad + 1, worker.ModelUsageCalls);
Assert.Equal(callsAfterInitialLoad + 1, worker.TaskUsageCalls);