WPF:如何在位于GridView单元格模板中的复选框中全选/取消选择所有复选框?

3
我正在尝试创建一个用于多个CheckBox的选中/取消全选功能,这些CheckBox位于GridViewColumn的单元格模板中。我将此列添加到GridView(以及其他列),将GridView设置为ListView的视图属性,然后将ListView数据绑定到自定义DataObjects集合。因此,ListView的每一行都有包含复选框的列,以及绑定到绑定对象的属性路径的列。
我想通过绑定CheckBoxes的IsChecked属性来创建选中/取消全选CheckBox,但我不想更改ListView所绑定的数据对象。我的第一次尝试是将ListView绑定到Dictionary,然后将IsChecked属性绑定到Dictionary的Value,将其他列绑定到Key.DataObjectProperty。然后,当单击选中/取消全选CheckBox时,我简单地切换了字典的Values。绑定正常工作,但显然字典不支持更改通知,因此CheckBoxes从未更新。
有人对解决这个问题有什么建议吗?
1个回答

2

我能想到的唯一方法是将你的DataObject和boolean封装在一个新类中,并实现INotifyPropertyChanged接口。假设这个新类叫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 <T> :INotifyPropertyChanged { public T Object { get; set; } ... } - Robin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接