急求WPF大牛! WPF 数据太多时,DataGrid中CheckBox列误选的问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求WPF大牛! WPF 数据太多时,DataGrid中CheckBox列误选的问题!相关的知识,希望对你有一定的参考价值。
布局文件如下:
<DataGrid Height="300" Name="List" Width="200" ItemsSource="Binding Info" >
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="选择" Width="50">
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="x:Type CheckBox">
</Style>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
<DataGridTextColumn Header="ID" Binding="Binding ID" Width="50" />
<DataGridTextColumn Header="Job" Binding="Binding JobNum" Width="80"/>
</DataGrid.Columns>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center">
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
后台代码如下:
public struct Info//定义与DataGrid相关的数据结构
public string ID get; set;
public string JobNum get; set;
public ObservableCollection<Info> list = new ObservableCollection<Info>();
public MainWindow()
Info info = new Info();
for (int i = 0; i < 1000;i++ )
info.ID = i.ToString();
info.JobNum = i.ToString();
list.Add(info);
InitializeComponent();
List.ItemsSource = list; //为DataGrid添加数据源
运行状况:
当我只选择前几个用户:比如0、1、2、3时,如下图
不再做其他任何操作,向下滑动滚动条,发现其他的行有误选情况,如下图:
这是怎么回事呀,求大牛解释!!
WPF里面的DataGrid有Virtualization提升绘制性能,会导致控件的复用
你这儿的Info结构里面加个IsChecked属性,做个数据绑定就行了追问
已经解决了!的确是数据绑定的问题.
参考技术A 你把DataGridCheckBoxColumn 改成模板列,里面再塞个checkbox试试。DataGridCheckBoxColumn 本身可能存在bug。追问
刚才试了模板列,还是不行啊!
追答晕,你checkbox有木有设定神马绑定项?
追问没有对checkbox列设定,但对其他列设定了绑定
参考技术B datagrid 滚动条刷新的问题。追问我感觉也是滚动条刷新的问题,要怎么解决呢?
追答ScrollViewer.CanContentScroll="False" 这个很重要
这个方法我试过,可以解决checkbox混乱的问题,但是会引起另一个问题,运行时比较卡,貌似设置了 ScrollViewer.CanContentScroll="False" 之后,系统会一次性加载datagrid中的所有数据而引起的。这样的话得不偿失呀!请问还有其他方法吗?
追答ScrollViewer.CanContentScroll=false 是按物理滚动,按像素滚动。
ScrollViewer.CanContentScroll=true是按逻辑滚动,会改变Content的内容的。
你真想按逻辑滚动,就自定义滚动的内容(需要binding数据源,这个比较麻烦点),或者采用分页的形式(也要花点功夫,其实数据太多,分页倒是用户体验更好)。
现在不考虑分页。怎么自定义滚动的内容!
以上是关于急求WPF大牛! WPF 数据太多时,DataGrid中CheckBox列误选的问题!的主要内容,如果未能解决你的问题,请参考以下文章