WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件

时间:2011-04-08 11:04:26

标签: c# wpf wpfdatagrid

我不确定这是DataGrid控件或一般MultiSelectors的问题,但是当我在网格中选择多行时,会为每一行触发CollectionChanged事件。如果我用鼠标“拖动”,这是有道理的,但如果我“按住Shift键点击”选择多行或只是点击左上角的“全选行”按钮,也会出现这种情况。

我在MultiSelector上看到有Begin / EndUpdateSelectedItems方法以及IsUpdatingSelectedItems属性。不幸的是,我对这个系列/活动的消费者并不知道它的来源。

有没有办法让DataGrid / SelectedItems集合仅在更新完成后发送CollectionChanged通知?

谢天谢地。

修改 我发现,对于DataGrid,即使更改大型选择,也不会设置IsUpdatingSelectedItems属性。

修改 我发现DataGrid SelectionChanged事件在完全更改后只被正确触发一次。这很不幸,因为这会破坏简单数据绑定的可能性,但如果您可以控制SelectedItems集合的使用者,那么这是一种潜在的解决方法。

2 个答案:

答案 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