3

我正在开发一个基于 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 很慢吗?有没有办法解决这个问题?

让我知道是否需要更多信息。谢谢。

4

0 回答 0