我正在开发一个基于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慢吗?有什么方法可以解决这个问题吗?
如果有必要提供更多信息,请与我们联系。感谢。