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

WPF实现DataGrid选中行复选框批量勾选及联动勾选

WPF DataGrid 批量勾选与联动勾选解决方案

问题1:选中多行后批量勾选复选框

实现步骤:

  1. 实现RelayCommand命令类(用于绑定按钮操作)
public class RelayCommand : ICommand
{
    private readonly Action _execute;
    private readonly Func<bool> _canExecute;

    public event EventHandler CanExecuteChanged
    {
        add => CommandManager.RequerySuggested += value;
        remove => CommandManager.RequerySuggested -= value;
    }

    public RelayCommand(Action execute, Func<bool> canExecute = null)
    {
        _execute = execute ?? throw new ArgumentNullException(nameof(execute));
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true;

    public void Execute(object parameter) => _execute();
}
  1. 在ViewModel中添加批量勾选命令
// 假设实体类为DrawingItem,集合为ObservableCollection<DrawingItem>
public ObservableCollection<DrawingItem> MyListCollection { get; set; }
public ICommand BatchCheckCommand { get; }

public YourViewModel()
{
    MyListCollection = new ObservableCollection<DrawingItem>();
    BatchCheckCommand = new RelayCommand(BatchCheckSelectedRows);
}

private void BatchCheckSelectedRows()
{
    // 遍历所有选中的行,设置复选框为勾选状态
    foreach (var item in MyListCollection.Where(item => item.IsSelected))
    {
        item.IsChecked = true;
    }
}
  1. 在XAML中添加绑定命令的按钮
    在DataGrid同级位置添加按钮:
<Button Content="批量勾选选中行" Command="{Binding BatchCheckCommand}" Margin="10"/>

操作方式:选中DataGrid中的多行,点击按钮即可批量勾选这些行的复选框。


问题2:勾选S501时自动勾选已选中的S601、S701

实现步骤:

  1. 完善DrawingItem的INotifyPropertyChanged实现
public class DrawingItem : INotifyPropertyChanged
{
    public string drawingNumber { get; set; }

    bool isChecked;
    bool isSelected;

    public bool IsSelected
    {
        get { return this.isSelected; }
        set { this.Set(() => IsSelected, ref isSelected, value); }
    }

    public bool IsChecked
    {
        get { return this.isChecked; }
        set { this.Set(() => IsChecked, ref isChecked, value); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    protected bool Set<T>(Expression<Func<T>> propertyExpression, ref T field, T value)
    {
        if (EqualityComparer<T>.Default.Equals(field, value))
            return false;

        field = value;
        var propertyName = ((MemberExpression)propertyExpression.Body).Member.Name;
        OnPropertyChanged(propertyName);
        return true;
    }
}
  1. 在ViewModel中监听集合项的属性变更
public YourViewModel()
{
    MyListCollection = new ObservableCollection<DrawingItem>();
    // 订阅集合变更事件,为新项绑定属性变更监听
    MyListCollection.CollectionChanged += MyListCollection_CollectionChanged;
    BatchCheckCommand = new RelayCommand(BatchCheckSelectedRows);
}

private void MyListCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null)
    {
        foreach (DrawingItem item in e.NewItems)
        {
            item.PropertyChanged += DrawingItem_PropertyChanged;
        }
    }
    if (e.OldItems != null)
    {
        foreach (DrawingItem item in e.OldItems)
        {
            item.PropertyChanged -= DrawingItem_PropertyChanged;
        }
    }
}

private void DrawingItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName != nameof(DrawingItem.IsChecked)) return;

    var currentItem = sender as DrawingItem;
    // 检查当前项是S501且已被勾选
    if (currentItem?.drawingNumber == "S501" && currentItem.IsChecked)
    {
        // 找到所有已选中的S601、S701并勾选
        var targetItems = MyListCollection.Where(item => 
            item.IsSelected && (item.drawingNumber == "S601" || item.drawingNumber == "S701"));
        
        foreach (var item in targetItems)
        {
            item.IsChecked = true;
        }
    }
}

操作方式:先选中S601和S701的行,再勾选S501的复选框,此时已选中的S601、S701的复选框会自动被勾选。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:57:03