在WPF DataGrid中,我尝试使用以下代码选择给定列中的所有单元格
for (int i = 0; i < MyDataGrid.Items.Count; i++)
{
MyDataGrid.SelectedCells.Add(new DataGridCellInfo(MyDataGrid.Items[i], column));
}
但这段代码运行得非常慢。
MyDataGrid.Items
属于ItemCollection<MyDataStructure>
类型,可容纳约70,000个项目。
MyDataGrid.SelectedCells
的类型为IList<DataGridCellInfo>
。
整个循环大约需要30秒。
有人可以解释为什么需要这么长时间吗? 此外,是否可以将此交换为LINQ查询?
答案 0 :(得分:1)
当涉及大量数据时,访问SelectedCells/SelectedRows/SelectedColumns
无效。因此,您无法将其更改为更多更好地工作。相反,我建议你使用样式和DataTrigger
。要应用此解决方案,您必须扩展MyDataStructure
并添加IsSelected
属性。然后通过应用特定的样式:
<Style x:Key="dataGridSelectableCellStyle" TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsItemSelected}" Value="True">
<Setter Property="Background" Value="Gey"/>
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
MyDataStructure
中的属性:
private bool isItemSelected;
public bool IsItemSelected
{
get { return isItemSelected; }
set
{
isItemSelected = value;
this.OnPropertyChanged("IsItemSelected");
}
}
最后循环遍历行:
foreach(var item in MyDataGrid.ItemsSource.Cast<MyDataStructure>())
{
item.IsItemSelected = true;
}