Событие WPC Datagrid SelectionChanged запускается несколько раз при загрузке строк - PullRequest
1 голос
/ 21 сентября 2010

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

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

1 Ответ

1 голос
/ 21 сентября 2010

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

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

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

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

...