WPF:选中/取消选中位于gridview单元格模板中的复选框的所有复选框?

Posted

技术标签:

【中文标题】WPF:选中/取消选中位于gridview单元格模板中的复选框的所有复选框?【英文标题】:WPF: Check/Uncheck all checkbox for checkboxes located in gridview cell template? 【发布时间】:2010-09-24 11:48:35 【问题描述】:

我正在尝试为位于GridViewColumn 的单元格模板内的多个CheckBoxes 创建一个选中/取消选中所有CheckBox。我将此列添加到GridView(以及其他列),将GridView 设置为ListView 的视图属性,然后将ListView 数据绑定到自定义DataObjects 的集合。因此,ListView 的每一行都有一个包含复选框的列以及绑定到绑定对象的属性路径的列。

我想通过绑定CheckBoxesIsChecked 属性来创建选中/取消选中所有CheckBox,但我不想更改ListView 绑定到的数据对象。我的第一次尝试是将 ListView 绑定到Dictionary<DataObject,Boolean>,然后将IsChecked 属性绑定到DictionaryValue,将其他列绑定到KeyDataObjectProperty .然后,当单击选中/取消选中所有CheckBox 时,我只是切换了字典的Values。绑定工作正常,但显然字典不支持更改通知,因此 CheckBoxes 从未更新。

有人对解决这个问题的最佳方法有什么建议吗?

【问题讨论】:

【参考方案1】:

我能想到的唯一方法是将您的 DataObject 和布尔值包装在一个实现 INotofyPropertyChanged 的​​新类中。说新类是YourCollection。将 ObservableCollection< YourNewClass > 实例绑定到您的 ListView

   public class YourNewClass :INotifyPropertyChanged

    public YourDataObject Object  get; set; 

    private bool _isChecked;
    public bool IsChecked
    
        get
        
            return _isChecked;
        
        set
        
            _isChecked = value;
            OnPropertyChanged("IsChecked");
        
    

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    

【讨论】:

好主意,谢谢。如果 YourNewClass 是泛型的,而泛型参数是 YourDataObject 的类型,这仍然有效吗?即: public class YourNewClass :INotifyPropertyChanged public T Object get;放; ...

以上是关于WPF:选中/取消选中位于gridview单元格模板中的复选框的所有复选框?的主要内容,如果未能解决你的问题,请参考以下文章

WPF关闭datagrid插入行

如果选中 CheckAll 则全选,如果未选中则使用 jQuery 从 Gridview 中取消全选

如何使用 JQuery 取消选中 GridView 中的所有单选按钮?

GridView选中,编辑,取消,删除代码

VB.NET 如何获取datagridview选中项的值

让 WPF 的 RadioButton 支持再次点击取消选中的功能