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