Как можно применять события к элементу ListView в WPF с использованием C#?

Как создать событие для ListView в файле .cs, связанном с соответствующим .xaml, чтобы при нажатии на элемент списка значение определенного поля выбранного экземпляра класса вставлялось в TextBox?
  • 12 февраля 2025 г. 19:44
Ответы на вопрос 2
Чтобы реализовать обработку события выбора элемента в `ListView` и при нажатии на элемент списка вставлять значение определенного поля выбранного экземпляра класса в `TextBox`, необходимо выполнить несколько шагов.

### Шаг 1: Определите ваши модели

Предположим, у вас есть класс, который вы хотите использовать в `ListView`. Например, класс `Person`:

```csharp
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
```

### Шаг 2: Создайте коллекцию объектов

Нужно создать коллекцию объектов, которые вы будете отображать в `ListView`. Это можно сделать в вашем представлении (ViewModel):

```csharp
using System.Collections.ObjectModel;

public class MainViewModel
{
    public ObservableCollection<Person> People { get; set; }

    public MainViewModel()
    {
        People = new ObservableCollection<Person>
        {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };
    }
}
```

### Шаг 3: Настройте XAML

Создайте разметку для `ListView` и `TextBox` в вашем XAML-файле:

```xml
<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ListView Example" Height="300" Width="400">
    <Grid>
        <ListView x:Name="PeopleListView" SelectionChanged="PeopleListView_SelectionChanged">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <TextBox x:Name="SelectedPersonTextBox" Margin="0,150,0,0" />
    </Grid>
</Window>
```

### Шаг 4: Свяжите данные в коде

В коде `MainWindow.xaml.cs` вам нужно привязать коллекцию людей к `ListView` и добавить обработчик события выбора элемента:

```csharp
using System.Windows;

namespace YourNamespace
{
    public partial class MainWindow : Window
    {
        public MainViewModel ViewModel { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            ViewModel = new MainViewModel();
            PeopleListView.ItemsSource = ViewModel.People;
        }

        private void PeopleListView_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            if (PeopleListView.SelectedItem is Person selectedPerson)
            {
                SelectedPersonTextBox.Text = selectedPerson.Name; // Или любое другое свойство
            }
        }
    }
}
```

### Результат

Теперь, когда вы выбираете элемент из `ListView`, имя выбранного человека будет отображаться в `TextBox`. Вы можете изменить строку `SelectedPersonTextBox.Text = selectedPerson.Name;` на любое другое свойство, если вам нужно, чтобы отображалось что-то другое (например, возраст). 

### Примечание

Не забудьте добавить необходимые пространства имен и настроить ваш проект в соответствии с вашими потребностями.
RTFM: System.Windows.Controls -> ListView 
На событие вешаете свой код с нужными вам действиями.
Похожие вопросы