我不确定这是DataGrid控件的问题还是MultiSelectors的问题,但是当我在网格中选择多行时,CollectionChanged事件会为每一行触发。如果我用鼠标拖动,这是有意义的,但如果我'shift-click'选择多行或简单地单击左上角的'select-all-rows'按钮,它也会发生。
我在Multiplexer上看到有开始/EndUpdateSelectedItems方法以及IsUpdatingSelectedItems属性。不幸的是,我的这个收藏/事件的消费者不知道它的来源。
有没有一种方法可以让DataGrid / SelectedItems集合只在更新完成时发送CollectionChanged通知?
非常感谢。
**编辑:**我发现DataGrid的IsUpdatingSelectedItems属性没有设置,即使在更改大的选择时也是如此。
**编辑:**我发现DataGrid SelectionChanged事件在完全更改后仅正确触发一次。这是不幸的,因为这破坏了简单数据绑定的可能性,但如果您可以控制SelectedItems集合的使用者,这是一种潜在的解决方法。
3条答案
按热度按时间slwdgvem1#
为了完整起见,我将“回答”我自己的问题。事实证明,WPF控件通常只能在其CollectionChanged事件处理程序中处理单个元素更改-这意味着“为每个项目调用CollectionChanged”工作流是当前形式的框架的正确方式。然而,我个人认为这是一个可怕的性能问题。
dxxyhpgq2#
ViewModel:
将SelectedItems属性绑定到DataGrid的SelectedItem上,并添加System.Windows.Controls.Primitives. MultiObject
cotxawn73#
我还发现,当我一次选择多行时,它会为每一个选中的项目发送一个更改事件,这非常烦人。所以我做了一个行为...和一个BulkObservableCollection,它将处理它,以便它只发送一个事件,而不是所有事件。下面的代码是一个在XAML中使用它的快速示例:
然后是XAML