c# - WPF DataGrid(MultiSelector?)多次引发 SelectedItems CollectionChanged 事件

标签 c# wpf wpfdatagrid

我不确定这是 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/

相关文章:

c# - LINQ 到 XML : Collapse mutliple levels to single list

c# - Mac 和 Linux 上类似 Windows 的 shell 扩展

c# - 无法通过MediaElement播放YouTube

c# - 使用多重绑定(bind)更新源

c# - Windows 8 Metro TextBlock 动画

c# - 在 WPF 中制作 Gif 动画

c# - 在 WPF EXE 中嵌入多个图标

c# - ContentControl 上的双向绑定(bind)

c# - 没有参数传递给自定义 DataTemplateSelector 的 SelectTemplate()。为什么?

WPF 数据网格绑定(bind)