我正在开发一个基于 DataGrid 的自定义控件,它具有自己独特的功能,但还包括一些按钮,这些按钮将在使用时随控件一起提供。这些按钮实现过滤器、全选和清除选择。我对后两者有性能问题。
这是响应 MVVMLight 消息的代码,该消息指示提供的对象列表需要切换其选择。对于 SelectAll 和 ClearSelection,我使用 Linq 函数来获取适当的点列表。我知道慢速部分在 foreach 循环中是一个事实。循环上方和下方的代码更改了自定义控件的状态,以便忽略与选择有关的其他函数。
SelectionChanged -= GridSelectionChanged;
_isUpdating = true;
var points = obj.Content;
foreach (var point in points)
{
if (point.IsSelected)
{
SelectedItems.Add(point);
}
if (!point.IsSelected)
{
SelectedItems.Remove(point);
}
}
_isUpdating = false;
SelectionChanged += GridSelectionChanged;
Ctrl+A 的效果非常好,这让人倍感沮丧。这都是因为 SelectedItems.add/remove 很慢吗?有没有办法解决这个问题?
让我知道是否需要更多信息。谢谢。