fix(ui): context menu operates on right-clicked item and gates new-task on list selection

- Add PointerPressed handlers on list/task item templates that set SelectedList/SelectedTask on right-click before the ContextFlyout opens
- Add CanAddTask guard and NotifyCanExecuteChangedFor on CurrentListId so Add Task menu item is disabled when no list is selected

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Mika Kuns
2026-04-13 15:11:34 +02:00
parent 3653dcad01
commit 5d5a583af0
5 changed files with 26 additions and 4 deletions

View File

@@ -24,7 +24,7 @@ public partial class TaskListViewModel : ViewModelBase
public ObservableCollection<TaskItemViewModel> Tasks { get; } = new();
[ObservableProperty] private TaskItemViewModel? _selectedTask;
[ObservableProperty] private string? _currentListId;
[ObservableProperty, NotifyCanExecuteChangedFor(nameof(AddTaskCommand))] private string? _currentListId;
public event Action<TaskItemViewModel?>? SelectedTaskChanged;
@@ -69,7 +69,9 @@ public partial class TaskListViewModel : ViewModelBase
}
}
[RelayCommand]
private bool CanAddTask() => CurrentListId is not null;
[RelayCommand(CanExecute = nameof(CanAddTask))]
private async Task AddTask()
{
if (CurrentListId is null) return;

View File

@@ -31,7 +31,7 @@
Margin="4">
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:ListItemViewModel">
<StackPanel Margin="4,2" DoubleTapped="OnListItemDoubleTapped">
<StackPanel Margin="4,2" DoubleTapped="OnListItemDoubleTapped" PointerPressed="OnListItemPointerPressed">
<StackPanel.ContextFlyout>
<MenuFlyout>
<MenuItem Header="Edit"

View File

@@ -27,4 +27,14 @@ public partial class MainWindow : Window
e.Handled = true;
}
}
private void OnListItemPointerPressed(object? sender, PointerPressedEventArgs e)
{
if (e.GetCurrentPoint(null).Properties.PointerUpdateKind == PointerUpdateKind.RightButtonPressed
&& sender is Control c && c.DataContext is ListItemViewModel item
&& DataContext is MainWindowViewModel vm)
{
vm.SelectedList = item;
}
}
}

View File

@@ -18,7 +18,7 @@
Margin="4">
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:TaskItemViewModel">
<Grid ColumnDefinitions="*,Auto,Auto" Margin="4,2" DoubleTapped="OnTaskItemDoubleTapped">
<Grid ColumnDefinitions="*,Auto,Auto" Margin="4,2" DoubleTapped="OnTaskItemDoubleTapped" PointerPressed="OnTaskItemPointerPressed">
<Grid.ContextFlyout>
<MenuFlyout>
<MenuItem Header="Edit"

View File

@@ -20,4 +20,14 @@ public partial class TaskListView : UserControl
e.Handled = true;
}
}
private void OnTaskItemPointerPressed(object? sender, PointerPressedEventArgs e)
{
if (e.GetCurrentPoint(null).Properties.PointerUpdateKind == PointerUpdateKind.RightButtonPressed
&& sender is Control c && c.DataContext is TaskItemViewModel item
&& DataContext is TaskListViewModel vm)
{
vm.SelectedTask = item;
}
}
}