我不确定这是DataGrid控件或一般MultiSelectors的问题,但是当我在网格中选择多行时,会为每一行触发CollectionChanged事件。如果我用鼠标“拖动”,这是有道理的,但如果我“按住Shift键点击”选择多行或只是点击左上角的“全选行”按钮,也会出现这种情况。
我在MultiSelector上看到有Begin / EndUpdateSelectedItems方法以及IsUpdatingSelectedItems属性。不幸的是,我对这个系列/活动的消费者并不知道它的来源。
有没有办法让DataGrid / SelectedItems集合仅在更新完成后发送CollectionChanged通知?
谢天谢地。
修改 我发现,对于DataGrid,即使更改大型选择,也不会设置IsUpdatingSelectedItems属性。
修改 我发现DataGrid SelectionChanged事件在完全更改后只被正确触发一次。这很不幸,因为这会破坏简单数据绑定的可能性,但如果您可以控制SelectedItems集合的使用者,那么这是一种潜在的解决方法。
答案 0 :(得分:1)
为了完整起见,我会“回答”我自己的问题。事实证明,WPF控件通常无法处理其CollectionChanged事件处理程序中的单个元素更改 - 这意味着“为每个项目调用CollectionChanged”工作流是正确的方式。目前的形式。但是,我个人觉得这是一个糟糕的性能问题。
答案 1 :(得分:0)
<强>视图模型:强>
private MultiSelector _selectedItems;
Public MultiSelector SelectedItems
{
get {return _selectedItems;
set { _selectedItems=value;}
}
将 SelectedItems 属性绑定到DataGrid的SelectedItem并添加 System.Windows.Controls.Primitives.MultiSelector