我不确定这是 DataGrid 控件还是 MultiSelectors 一般的问题,但是当我在网格中选择多行时,CollectionChanged 事件会针对每一行触发。如果我用鼠标“拖动”,这是有道理的,但如果我“按住 Shift 并单击”以选择多行或只需单击左上角的“全选”按钮,也会发生这种情况。
我在 MultiSelector 上看到有 Begin/EndUpdateSelectedItems 方法以及 IsUpdatingSelectedItems 属性。不幸的是,我的这个系列/事件的消费者并不知道它的来源。
有没有办法让 DataGrid/SelectedItems 集合仅在更新完成时发送 CollectionChanged 通知?
谢谢你。
编辑: 我发现对于 DataGrid,IsUpdatingSelectedItems 属性未设置,即使在更改大量选择时也是如此。
编辑: 我发现 DataGrid SelectionChanged 事件在完全更改后仅被正确触发一次。不幸的是,这破坏了简单数据绑定(bind)的可能性,但如果您可以控制 SelectedItems 集合的使用者,这是一个潜在的解决方法。
最佳答案
为了完整起见,我将“回答”我自己的问题。事实证明,WPF 控件通常只能处理其 CollectionChanged 事件处理程序中的单个元素更改 - 这意味着“为每个项目调用 CollectionChanged”工作流是框架的正确方式它目前的形式。但是,我个人认为这是一个糟糕的性能问题。
关于c# - WPF DataGrid(MultiSelector?)多次引发 SelectedItems CollectionChanged 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594150/