2011-04-08 49 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