假设你有一个包含多个复选框的数据表格,并且每行数据都有一个唯一的 ID。你想要实现一个功能,当用户选中一些复选框并点击'删除'按钮时,你可以删除所有选中行的数据。

以下是实现此功能的代码示例:

XAML 代码:

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding DataList}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="选择" Binding="{Binding IsSelected}" />
        <DataGridTextColumn Header="ID" Binding="{Binding ID}" />
        <DataGridTextColumn Header="名称" Binding="{Binding Name}" />
        <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
    </DataGrid.Columns>
</DataGrid>
<Button Content="删除" Click="DeleteButton_Click" />

C# 代码:

public class DataItem : INotifyPropertyChanged
{
    private int id;
    public int ID
    {
        get { return id; }
        set { id = value; NotifyPropertyChanged(nameof(ID)); }
    }

    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; NotifyPropertyChanged(nameof(Name)); }
    }

    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; NotifyPropertyChanged(nameof(Age)); }
    }

    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set { isSelected = value; NotifyPropertyChanged(nameof(IsSelected)); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class ViewModel : INotifyPropertyChanged
{
    private ObservableCollection<DataItem> dataList;
    public ObservableCollection<DataItem> DataList
    {
        get { return dataList; }
        set { dataList = value; NotifyPropertyChanged(nameof(DataList)); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

public partial class MainWindow : Window
{
    private ViewModel viewModel;

    public MainWindow()
    {
        InitializeComponent();
        viewModel = new ViewModel();
        viewModel.DataList = new ObservableCollection<DataItem>()
        {
            new DataItem() { ID = 1, Name = "张三", Age = 18 },
            new DataItem() { ID = 2, Name = "李四", Age = 20 },
            new DataItem() { ID = 3, Name = "王五", Age = 22 },
            new DataItem() { ID = 4, Name = "赵六", Age = 24 },
        };
        DataContext = viewModel;
    }

    private void DeleteButton_Click(object sender, RoutedEventArgs e)
    {
        var selectedItems = viewModel.DataList.Where(item => item.IsSelected).ToList();
        foreach (var item in selectedItems)
        {
            viewModel.DataList.Remove(item);
        }
    }
}

在这个示例中,我们首先定义了一个 DataItem 类来表示每行数据,其中包含一个 ID 属性和一个 IsSelected 属性,IsSelected 属性用于表示是否选中该行。然后我们定义了一个 ViewModel 类,用于维护数据列表,并包含一个 DataList 属性和一个 DeleteButton_Click 方法。在 DeleteButton_Click 方法中,我们首先使用 LINQ 查询选中的行,然后遍历选中的行并从 DataList 中删除。最后,我们将 ViewModel 对象绑定到窗口的 DataContext 上,并将复选框列的 Binding 设置为 IsSelected 属性。

WPF 多选框删除数据 - 获取当前行 ID 实现代码

原文地址: https://www.cveoy.top/t/topic/nfBe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录