WPF ListView 多选框删除选中项并获取ID实现代码
以下是一个利用多选框的 WPF ListView 删除选中项的示例代码:
XAML 代码:
<ListView x:Name='myListView'>
<ListView.View>
<GridView>
<GridViewColumn Header='ID' Width='50' DisplayMemberBinding='{Binding Id}' />
<GridViewColumn Header='Name' Width='120' DisplayMemberBinding='{Binding Name}' />
<GridViewColumn Header='Age' Width='50' DisplayMemberBinding='{Binding Age}' />
<GridViewColumn Header='IsSelected' Width='50'>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked='{Binding IsSelected}' />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button Content='Delete' Click='DeleteButton_Click' />
C# 代码:
public partial class MainWindow : Window
{
private ObservableCollection<Person> persons;
public MainWindow()
{
InitializeComponent();
persons = new ObservableCollection<Person>
{
new Person { Id = 1, Name = 'John', Age = 20 },
new Person { Id = 2, Name = 'Mary', Age = 25 },
new Person { Id = 3, Name = 'Tom', Age = 30 },
new Person { Id = 4, Name = 'Jane', Age = 35 }
};
myListView.ItemsSource = persons;
}
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
var selectedPersons = persons.Where(p => p.IsSelected).ToList();
foreach (var person in selectedPersons)
{
persons.Remove(person);
}
}
}
public class Person : INotifyPropertyChanged
{
private int id;
private string name;
private int age;
private bool isSelected;
public int Id
{
get { return id; }
set
{
id = value;
NotifyPropertyChanged();
}
}
public string Name
{
get { return name; }
set
{
name = value;
NotifyPropertyChanged();
}
}
public int Age
{
get { return age; }
set
{
age = value;
NotifyPropertyChanged();
}
}
public bool IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
在这个示例中,数据模型类 Person 实现了 INotifyPropertyChanged 接口,以便在属性值变化时更新 UI。Person 类有一个布尔类型的 IsSelected 属性,用于表示项是否被选中。在 XAML 中,我们为 IsSelected 属性绑定了一个 CheckBox 控件。
在删除按钮的单击事件处理程序中,我们使用 persons.Where(p => p.IsSelected) 获取所有被选中的项,并使用 foreach 循环从 persons 集合中删除它们。由于我们使用了 ObservableCollection 类型的 persons 集合,所以 UI 会自动更新。
注意,为了使 DeleteButton_Click 事件处理程序能够访问 persons 集合,我们将 persons 定义为一个类级别的字段。
原文地址: https://www.cveoy.top/t/topic/nfBW 著作权归作者所有。请勿转载和采集!