我有一个非常奇怪的行为,
DataGridTemplateColumn
持有一个CheckBox
。<DataGrid Margin="0,78,0,0"
ItemsSource="{Binding Prikaz}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserSortColumns="False"
CanUserResizeColumns="False"
HorizontalGridLinesBrush="#D6D6D6"
VerticalGridLinesBrush="#D6D6D6"
HeadersVisibility="Column">
<DataGrid.Columns>
<DataGridTemplateColumn Width="25">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
网格绑定到
DataTable
,因此它会生成行。
问题: 如果我检查网格中的几个
CheckBox
项目,然后快速滚动,则网格中的 CheckBox
项目开始随机检查和取消检查。到目前为止,我几乎没有找到任何关于这个问题的信息。对于这种奇怪的行为有解释吗?
出于性能原因,默认情况下会重用项目容器中的
CheckBox
元素。您可以通过将 VirtualizingPanel.VirtualizationMode
附加属性设置为 Standard
来关闭虚拟化:
<DataGrid ... VirtualizingPanel.VirtualizationMode="Standard">
另一个选项是使用数据绑定将
CheckBox
绑定到内存中对象的属性,该属性在滚动时不会更改。
我对将我的复选框绑定到对象属性不感兴趣。 对我来说,诀窍是禁用行虚拟化:
<DataGrid x:Name="MyDataGrid" EnableRowVirtualization="False"/>
虚拟化造成的所有混乱都消失了。