You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF:按钮点击时传递ListView选中项信息的实现方法

获取WPF ListView选中项实现删除功能

方法1:代码后台直接获取SelectedItem

假设你的员工数据实体类是Employee(包含Id、FirstName、LastName、Position属性),ListView的Name设为EmployeeListView,在Remove按钮的点击事件里可以这样写:

private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
    // 将选中项转换为Employee对象
    var selectedEmp = EmployeeListView.SelectedItem as Employee;
    
    if (selectedEmp != null)
    {
        // 获取目标ID
        int targetId = selectedEmp.Id;
        
        // 执行删除逻辑:比如从数据源移除项,或调用API删除
        yourEmployeeDataSource.Remove(selectedEmp);
        
        // 如果数据源是ObservableCollection,ListView会自动刷新;否则手动刷新
        // EmployeeListView.Items.Refresh();
    }
    else
    {
        MessageBox.Show("请先选择要删除的员工");
    }
}

方法2:处理多选场景

如果你的ListView允许多选(SelectionMode="Multiple"或Extended"),可以遍历SelectedItems集合:

private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
    // 先把选中项转成List,避免遍历过程中集合变更引发异常
    var selectedEmps = EmployeeListView.SelectedItems.Cast<Employee>().ToList();
    
    if (selectedEmps.Count > 0)
    {
        foreach (var emp in selectedEmps)
        {
            // 获取每个选中员工的ID并执行删除
            int empId = emp.Id;
            yourEmployeeDataSource.Remove(emp);
        }
    }
    else
    {
        MessageBox.Show("请选择至少一名员工");
    }
}

方法3:MVVM模式下的实现(推荐)

如果采用WPF推荐的MVVM模式,可以通过绑定SelectedItem到ViewModel的属性,再用命令处理删除:

  1. ViewModel核心代码:
public class EmployeeVM : INotifyPropertyChanged
{
    private Employee _selectedEmployee;
    public ObservableCollection<Employee> Employees { get; set; } = new ObservableCollection<Employee>();
    
    public Employee SelectedEmployee
    {
        get => _selectedEmployee;
        set
        {
            _selectedEmployee = value;
            OnPropertyChanged(nameof(SelectedEmployee));
        }
    }

    public ICommand RemoveCommand { get; }

    public EmployeeVM()
    {
        RemoveCommand = new RelayCommand(ExecuteRemove);
    }

    private void ExecuteRemove()
    {
        if (SelectedEmployee != null)
        {
            int targetId = SelectedEmployee.Id;
            // 执行删除逻辑
            Employees.Remove(SelectedEmployee);
        }
    }

    // 实现INotifyPropertyChanged接口
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
    }
}
  1. XAML绑定:
<!-- 先设置窗口的DataContext为EmployeeVM实例 -->
<ListView ItemsSource="{Binding Employees}" 
          SelectedItem="{Binding SelectedEmployee}">
    <!-- 你的列定义,无需显示Id列 -->
    <ListView.View>
        <GridView>
            <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}"/>
            <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}"/>
            <GridViewColumn Header="Position" DisplayMemberBinding="{Binding Position}"/>
        </GridView>
    </ListView.View>
</ListView>

<Button Content="Remove" Command="{Binding RemoveCommand}"/>

注:RelayCommand是自定义的ICommand实现类,你可以自己编写或使用MVVM框架(如Prism、MVVM Light)提供的命令类。

内容的提问来源于stack exchange,提问作者Vlad SD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:20:26