【问题标题】:WPF Checkbox check moves on scrollingWPF Checkbox 复选框在滚动时移动
【发布时间】:2016-06-25 07:59:52
【问题描述】:

我有一个数据网格,第一列是复选框类型的 DataGridTemplateColumn。

<DataGridTemplateColumn Header="Select">
     <DataGridTemplateColumn.CellTemplate>
           <DataTemplate >
                 <CheckBox  Name="chkSelectForMassRequest" Tag="{Binding AcctNum}" IsChecked="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged}" ClickMode="Press" Unchecked="chkSelectForMassRequest_Checked" Checked="chkSelectForMassRequest_Checked" ></CheckBox>
            </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

奇怪的是,当用户选中几个复选框然后向下滚动数据网格时,即使用户没有选中它们,一些复选标记也会从原始复选框中消失并重新出现在新可见的行中。我的问题是,无论该行是否可见,我如何保留所有行中的复选标记。还有,如何防止复选标记在滚动时四处移动?

提前致谢, 标记

【问题讨论】:

    标签: wpf checkbox datagrid


    【解决方案1】:

    我也尝试更改虚拟化模式,但这对我不起作用。我刚刚完全关闭了虚拟化,这就是完全解决问题的原因。

    EnableColumnVirtualization="False" 和 EnableRowVirtualization="False"

    【讨论】:

    • 你刚刚救了我们的命。我们在这个问题上浪费了 1 个月的时间。
    • 但是现在大大增加了页面的加载时间。
    【解决方案2】:

    我能够通过 Mode='TwoWay' 和 UpdateSourceProtepry='PropertyChange' 解决它

     <DataTemplate>
    <CheckBox IsChecked="{Binding Yes,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center"/>
    </DataTemplate>
    

    【讨论】:

      【解决方案3】:

      这是因为 DataGrid 默认开启了虚拟化,这与 Binding 中的 UpdateSourceTrigger 指令冲突。

      要么删除 UpdateSourceTrigger 并进行绑定 TwoWay,要么在声明 DataGrid 的 XAML 中添加“VirtualizingStackPanel.VirtualizationMode="Standard"'

      【讨论】:

      • 完美!!谢谢!
      【解决方案4】:

      如果您在行对齐中有复选框,您可以尝试添加 EnableColumnVirtualization="False" EnableRowVirtualization="False" 在 XAML 中声明 DataGrid

      例如

      DataGrid x:Name="here" EnableColumnVirtualization="False" EnableRowVirtualization="False"

      【讨论】:

        猜你喜欢
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        • 2016-04-21
        • 2010-11-21
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        相关资源
        最近更新 更多