2010-09-21 9 views
1

Когда я использую DataGridComboBoxColumn в моем WPF DataGrid, событие DataGrid SelectionChanged запускается несколько раз в зависимости от количества строк при загрузке строк в WPF DataGrid.WPF Datagrid SelectionChanged событие запускается несколько раз при загрузке строк

Как я могу остановить это? Из-за этого я столкнулся с проблемой производительности.

+0

Не могли бы вы рассказать мне, как «обработать событие на ComboBox и установить его свойство Handled в true» –

ответ

1

Это зависит от того, как именно у вас установлены ваши привязки.

Если, например, у вас есть ObservableCollection и вы добавляете в него элементы при загрузке данных, вы можете столкнуться с этой проблемой. Есть несколько решений, но я бы лучше определил проблему, чем печатать килограммы текста, поэтому, если вы можете предоставить немного больше подробностей, я отвечу с моей наилучшей догадкой о решении.

Редактировать: После просмотра образца я выяснил, в чем проблема: в DataGrid есть DataGridComboBoxColumn с привязкой SelectedValue к свойству; при выполнении привязки событие SelectionChanged для ComboBox запускается и улавливается обработчиком DataGrid. Существует несколько вариантов предотвращения этого ... нужно проверить исходный источник в EventHandler, а другой - обработать событие в ComboBox и установить его свойство Handled в true, чтобы он не попадал в обработчик DataGrid также.

Альтернативным, гораздо лучшим решением было бы не обрабатывать события выбора в коде, если нет веских оснований. Лучше всего привязать ItemsSource DataGrid к ICollectionView (например, ListCollectionView), который представляет собой исходную коллекцию; CurrentItem ICollectionView автоматически синхронизируется с выбранной строкой в ​​DataGrid, и вы можете обрабатывать выбранные изменения событий в ICollectionView, что делает его намного проще (и тестируется с помощью блока, несколько отличается от реализации пользовательского интерфейса и т. д.). Это не работает с несколькими выборами, но если вы можете выбрать только одну строку за раз, она должна работать достаточно хорошо.

+0

Привет, Алекс, я создал образец и загрузил его по следующему пути. Надеюсь, это даст больше информации. http://cid-ab034720ad5419bf.office.live.com/self.aspx/.Public/ksvimal%20files/DgrSelChngMultiTrigg.zip – ksvimal

+0

Спасибо за отзыв. Оно работает :-) – ksvimal