C#WPF数据网格"检查所有"按钮只起一半的作用



已解决:在数据网格中忘记以下内容

EnableRowVirtualization="false"

更新:使用消息框查看问题何时发生,只要勾选框位于屏幕外,就会立即发生。当滚动经过第一个条目时也会发生同样的情况

很难理解为什么有时它会返回null,有时工作得很好而没有问题。

数据是通过一个列表导入的,该列表是从另一个具有单个值的方法填充的,因此这不会引起任何问题。

public bool chkbox = false;

private void CheckAll(object sender, RoutedEventArgs e)
{
if (chkbox == false)
{
StringBuilder sbTemp = new StringBuilder();
for (int index = 0; index <= NameGrid.Items.Count - 1; index++)
{
FrameworkElement item = NameGrid.Columns[0].GetCellContent(NameGrid.Items[index]);
DataGridTemplateColumn temp = (NameGrid.Columns[0] as DataGridTemplateColumn);
CheckBox cb = temp.CellTemplate.FindName("PrintCheckBox", item) as CheckBox;
cb.IsChecked = true;
}
chkbox = true;
}
else
{
StringBuilder sbTemp = new StringBuilder();
for (int index = 0; index <= NameGrid.Items.Count - 1; index++)
{
FrameworkElement item = NameGrid.Columns[0].GetCellContent(NameGrid.Items[index]);
DataGridTemplateColumn temp = (NameGrid.Columns[0] as DataGridTemplateColumn);
CheckBox cb = temp.CellTemplate.FindName("PrintCheckBox", item) as CheckBox;
cb.IsChecked = false;
}
chkbox = false;
}
}

数据网格XML


<DataGrid Name="NameGrid" Grid.Row="0" Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="100">
<DataGridTemplateColumn.Header>
<CheckBox Content="Include" Click="CheckAll"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="PrintCheckBox" IsChecked="{Binding Path=IsChecked,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   Margin="45 2 0 0"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"Width="100"/>
</DataGrid.Columns>
</DataGrid>

插入

EnableRowVirtualization="false"

数据网格视图主控制器内部

最新更新