假设你有一个包含多个复选框的数据表格,并且每行数据都有一个唯一的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/bPBb 著作权归作者所有。请勿转载和采集!

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