【问题标题】:WPF: Check/Uncheck all checkbox for checkboxes located in gridview cell template?WPF:选中/取消选中位于gridview单元格模板中的复选框的所有复选框?
【发布时间】: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 从未更新。

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

【问题讨论】:

    标签: c# wpf data-binding gridview checkbox


    【解决方案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;放; } ... }
    猜你喜欢
    • 2015-08-25
    • 2011-01-31
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2011-06-15
    • 2016-06-05
    相关资源
    最近更新 更多