2010-09-21 225 views
1

当我在我的WPF DataGrid中使用DataGridComboBoxColumn时,DataGrid SelectionChanged事件在加载WPF DataGrid中的行时基于行数多次触发。WPF Datagrid SelectionChanged事件在加载行时触发多次

我该如何阻止?正因为如此,我正面临性能问题。

+0

你能告诉我如何 “在ComboBox上处理事件并将其Handled属性设置为true” – 2012-01-27 06:03:05

回答

1

这取决于你如何设置绑定。

如果您有一个ObservableCollection并且您在加载数据时向其添加项目,则可能会遇到此类问题。有多种解决方案,但我宁愿找出问题的地方,而不是输入公里的文字,所以如果你能提供更多的细节,我会回答我最好的解决方案。

编辑:看到示例后,我想出了什么问题:DataGrid中有一个DataGridComboBoxColumn,SelectedValue绑定到一个属性;当执行绑定时,ComboBox的SelectionChanged事件被触发,并被DataGrid上的处理程序捕获。有几种方法可以防止这种情况发生......一种是检查EventHandler中的OriginalSource,另一种是处理ComboBox上的事件并将其Handled属性设置为true,以使其不会被DataGrid处理程序捕获以及。

另一种更好的解决方案是不处理代码隐藏中的选择事件,除非有非常可靠的原因。最好将DataGrid的ItemsSource绑定到代表原始集合的ICollectionView(例如ListCollectionView); ICollectionView的CurrentItem会自动与DataGrid中的选定行同步,您可以在ICollectionView上处理选择更改的事件,使其更容易(和单元测试,与UI实现有点分离等)。这不适用于多个选择,但如果您一次只能选择一行,它应该工作得很好。

+0

嗨Alex,我创建了一个示例并上传到下面的路径下。希望它提供更多信息。 http://cid-ab034720ad5419bf.office.live.com/self.aspx/.Public/ksvimal%20files/DgrSelChngMultiTrigg.zip – ksvimal 2010-09-22 06:39:35

+0

感谢您的反馈。有用 :-) – ksvimal 2010-09-23 04:25:30

相关问题