Как получить информацию о родительском элементе , нажав на кнопку в дочернем

Пишу WPF-приложение для автосервиса. У меня есть список объектов класса Client, содержащих в себе список строк и другие свойства:

public class Client
{
    public uint Id { get; set; }
    public string CarModel { get; set; }
    public string ClientName { get; set; }
    public List<string> ActiveTasks { get; set; }
    public List<string> CompletedTasks { get; set; }
}

Для отображения карточек с этими клиентами я с помощью чатгпт написал следующий код. Мне было важно, чтобы возле каждого элемента списка активных и завершенных задач была кнопка, которая соответственно завершает или возвращает в список активных задачу. Код XAML:

<ItemsControl x:Name="cardsItemsControl" ScrollViewer.HorizontalScrollBarVisibility="Auto">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="3" BorderBrush="Black" Margin="5" Padding="5">
                <StackPanel>
                    <TextBlock Text="{Binding CarModel}" FontWeight="Bold" FontSize="16"/>
                    <TextBlock Text="{Binding ClientName}" FontSize="14" Margin="0 5"/>
                    <Separator Margin="0 5"/>

                    <ScrollViewer MaxHeight="250">
                        <StackPanel>
                            <TextBlock Text="Активные задачи" FontWeight="Bold" FontSize="14"/>
                            <ItemsControl ItemsSource="{Binding ActiveTasks}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding}" FontSize="12"/>
                                            <Button Content="✔" Click="CompleteTask_Click" Tag="{Binding}" Margin="30 0 15 0"/>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>

                            <TextBlock Text="Завершенные задачи" FontWeight="Bold" FontSize="14" Margin="0 10 0 5"/>
                            <ItemsControl ItemsSource="{Binding CompletedTasks}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding}" FontSize="12"/>
                                            <Button Content="↩" Click="RestoreTask_Click" Tag="{Binding}" Margin="30 0 15 0"/>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </StackPanel>
                    </ScrollViewer>
                </StackPanel>
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Дальше мне нужно сделать обработчик событий для нажатия на кнопки. Сейчас они выглядят так (вариант от нейросети):

private void CompleteTask_Click(object sender, RoutedEventArgs e)
    {
        // Обработчик события для кнопки "✔" (перевести задачу в завершенные)
        Button button = (Button)sender;
        string task = button.Tag.ToString();

        // Найти соответствующего клиента и переместить задачу из активных в завершенные
        foreach (Client client in Clients)
        {
            if (client.ActiveTasks.Contains(task))
            {
                client.ActiveTasks.Remove(task);
                client.CompletedTasks.Add(task);
                RefreshItemsControl(cardsItemsControl);
                break;
            }
        }
    }

Разумеется, проблема этого кода в том, что он проходится по всем клиентам в списке. Мне же нужно, чтобы я мог узнать, в какой именно карточке была нажата кнопка. Я могу использовать button.Tag, только чтобы узнать какая именно задача была нажата, но не в какой карточке. Помогите пожалуйста


Ответы (0 шт):