已解决:在数据网格中忘记以下内容
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"
数据网格视图主控制器内部