DataGrid卷轴中的错误 - WPF?

时间:2015-06-13 18:17:09

标签: wpf scroll datagrid

我希望你能帮助我:

我有一个包含20行的DataGrid,每次检查其中一列中的复选框时,标签值每次增加100,如果未选中则减少。因此,一旦我检查了所有行,标签的值将为2000。 就像你在下面看到的那样:

enter image description here

当我减小DataGrid的高度时,会出现一个垂直滚动,当我检查复选框时,程序似乎与您看到的类似: enter image description here

但如果我向下滚动垂直条,其他复选框会启用或检查,不知道为什么? 在这种情况下,我检查了前六个复选框,标签的值是600,这很好,但为什么其他的复选框出现? 感谢..

enter image description here

以下是我用过的代码:

<StackPanel Name="spUno"  Width="auto " LostKeyboardFocus="spUno_LostKeyboardFocus" >
        <Button Name="btn_Accion" Margin="5" Width="100" Height="30" Content="Accion" Click="btn_Accion_Click">
        </Button>
        <Label Name="lbl_Muestra" Width="300" Margin="5"/>
        <DataGrid Name="dg_Pruebas" AutoGenerateColumns="False" DataContext="{Binding}" Height="200" Width="300"
                 SelectionChanged="dg_Pruebas_SelectionChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Id" Binding="{Binding Path=id}"></DataGridTextColumn>
                <DataGridTextColumn Header="Nombre" Binding="{Binding Path=nombre}" ></DataGridTextColumn>
                <!--<DataGridCheckBoxColumn Header="check" Binding="{Binding Path=isChecked}" ></DataGridCheckBoxColumn>-->
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.Header >
                            <TextBlock>Ver 
                            </TextBlock>
                    </DataGridTemplateColumn.Header>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Name="ck_Prueba" Visibility="{Binding Path=visibility}" Checked="ck_Prueba_Checked" Unchecked="ck_Prueba_Checked" ></CheckBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>


private void ck_Prueba_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox check = e.OriginalSource as CheckBox;
        Objeto obj = dg_Pruebas.SelectedItem as Objeto;
        if (obj == null)
            return;
        if (check.IsChecked.Value) 
        {
            lbl_Muestra.Content = (Convert.ToInt32(lbl_Muestra.Content)+Convert.ToInt32(obj.valor)).ToString();
        } else 
        {
            lbl_Muestra.Content = (Convert.ToInt32(lbl_Muestra.Content) - Convert.ToInt32(obj.valor)).ToString();
        }

    }

1 个答案:

答案 0 :(得分:0)

可能只是回收速度
尝试

VirtualizingStackPanel.VirtualizationMode = “标准”