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
的每一行都有一个包含复选框的列以及绑定到绑定对象的属性路径的列。
我想通过绑定CheckBoxes
的IsChecked
属性来创建选中/取消选中所有CheckBox
,但我不想更改ListView
绑定到的数据对象。我的第一次尝试是将 ListView 绑定到Dictionary<DataObject,Boolean>
,然后将IsChecked
属性绑定到Dictionary
的Value
,将其他列绑定到Key
。DataObjectProperty
.然后,当单击选中/取消选中所有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以上是关于WPF:选中/取消选中位于gridview单元格模板中的复选框的所有复选框?的主要内容,如果未能解决你的问题,请参考以下文章
如果选中 CheckAll 则全选,如果未选中则使用 jQuery 从 Gridview 中取消全选