C# 选中所有wpf datagrid复选框只会选择视图中的项目
我使用以下方法选择datagrid中的所有复选框:C# 选中所有wpf datagrid复选框只会选择视图中的项目,c#,wpf,checkbox,datagrid,C#,Wpf,Checkbox,Datagrid,我使用以下方法选择datagrid中的所有复选框: private void CheckboxSelectAll(int column) { for (int i = 0; i < twn; i++) { var row = (DataGridRow)dGrid.ItemContainerGenerator.ContainerFromIndex(i); if (row == null) co
private void CheckboxSelectAll(int column)
{
for (int i = 0; i < twn; i++)
{
var row = (DataGridRow)dGrid.ItemContainerGenerator.ContainerFromIndex(i);
if (row == null) continue;
var chk = (System.Windows.Controls.CheckBox)dGrid.Columns[column].GetCellContent(row);
chk.IsChecked = true;
}
}
private void复选框selectAll(int列)
{
对于(int i=0;i
这仅在所有列都在视图中时有效。例如,如果复选框的数量超过datagrid的高度,它将不选择这些复选框。我必须向下滚动,将它们显示在视图中,然后重新调用我的方法以最终选中剩余的复选框
我错过了什么?这些复选框已被数据绑定
如果我更改datagrid的高度以显示更多复选框,这将允许我选择更多复选框。这只是一种解决方法,我想了解为什么我的代码会使复选框对视图很重要。解决方案可以在这里找到: 解决方案是禁用RowVirtualization
EnableRowVirtualization="False"
我错过了什么?这些复选框已被数据绑定
如果复选框
是数据绑定的,则应设置复选框
的被选中的
属性绑定到的源属性的值
例如,如果您的复选框定义如下:
<CheckBox IsChecked="{Binding Checked}" />
确保定义了Checked
属性的类正确实现了INotifyPropertyChanged
接口:
这是一种更好的解决方案,可以禁用内置虚拟化,因为后者可能会对性能产生负面影响。在您的循环中,twn是什么?一个双倍值,也等于存在的行数。如果您有大量行,如果您禁用虚拟化,可能会出现性能问题。
foreach(var item in dGrid.Items.OfType<YourClass>())
{
item.Checked = true;
}