【问题标题】:Bug in a Scroll of DataGrid - WPF?DataGrid 滚动中的错误 - WPF?
【发布时间】:2015-06-13 18:17:08
【问题描述】:

希望你能帮我解决这个问题:

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

当我降低 DataGrid 的高度时,会出现一个 Vertical Scroll,当我选中复选框时,该过程似乎与您所看到的相似:

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

这是我使用的代码:

<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();
        }

    }

【问题讨论】:

    标签: wpf scroll datagrid


    【解决方案1】:

    可能只是为了速度而回收
    试试

    VirtualizingStackPanel.VirtualizationMode="标准"

    【讨论】:

    • 它似乎工作得更好,但是当我有几个像 30 这样的项目,并且用户多次滚动网格时,问题再次出现。我的意思是,之前检查过的项目似乎没有被检查过......知道如何解决它吗?
    猜你喜欢
    • 2012-06-27
    • 2017-07-12
    • 2014-06-24
    • 2011-10-06
    • 2011-01-19
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多