WPF复选框检查在滚动时移动

时间:2016-03-10 12:54:06

标签: wpf checkbox datagrid

我有一个datagrid,第一列是Checkbox类型的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>

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

提前致谢, 标记

4 个答案:

答案 0 :(得分:1)

这是因为DataGrid默认情况下已启用虚拟化,这与Binding中的UpdateSourceTrigger指令冲突。

删除UpdateSourceTrigger并进行绑定TwoWay,或者添加&#39; VirtualizingStackPanel.VirtualizationMode =&#34;标准&#34;&#39;在声明DataGrid的XAML中

答案 1 :(得分:1)

我也试过更改VirtualizationMode,但这对我没用。我完全关闭了虚拟化,完全解决了这个问题。

EnableColumnVirtualization =&#34;假&#34;和EnableRowVirtualization =&#34; False&#34;

答案 2 :(得分:1)

我能用Mode ='TwoWay'和UpdateSourceProtepry ='PropertyChange'来解决它

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

答案 3 :(得分:0)

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

例如。

DataGrid x:Name =“ here” EnableColumnVirtualization =“ False” EnableRowVirtualization =“ False”