2011-04-08 53 views
4

我不确定这是DataGrid控件还是MultiSelectors的问题,但是当我在网格中选择多行时,CollectionChanged事件是为每一排发射。这是有道理的,如果我用我的鼠标“拖动”,但它也会发生,如果我'shift-click'选择多行或只需点击左上角'选择所有行'按钮。WPF DataGrid(MultiSelector?)多次提高SelectedItems CollectionChanged事件

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

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

谢谢你。

编辑: 我发现对于DataGrid IsUpdatingSelectedItems属性即使在更改大选择时也未设置。

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

回答

1

为了完整起见,我会'回答'我自己的问题。事实证明,WPF控件通常不能处理任何事情,只能在其CollectionChanged事件处理程序中进行单个元素更改 - 这意味着“为每个项目调用CollectionChanged”工作流程是框架目前形式的方式。但是,我个人觉得这是一个糟糕的性能问题。

0

视图模型:

private MultiSelector _selectedItems; 

    Public MultiSelector SelectedItems 
    { 
     get {return _selectedItems; 
     set { _selectedItems=value;}        
     } 

绑定SelectedItems物业的DataGrid的SelectedItem,并添加System.Windows.Controls.Primitives.MultiSelector