当我在WPF DataGrid中使用DataGridComboBoxColumn时,DataGrid SelectionChanged事件在加载WPF DataGrid中的行时会根据行数触发多次。
我怎么能阻止这个?因此我面临性能问题。
答案 0 :(得分:1)
具体取决于您如何设置绑定。
例如,如果您有一个ObservableCollection,并且在加载数据时向其中添加项目,则可能会遇到此类问题。有多种解决方案,但我宁愿查明问题而不是输入几公里的文本,所以如果你能提供更多的细节,我会用最好的猜测来回答。
编辑:看到示例后,我发现了问题所在:DataGrid中有一个DataGridComboBoxColumn,其中SelectedValue绑定到一个属性;执行绑定时,会触发ComboBox的SelectionChanged事件,并由DataGrid上的处理程序捕获。有几个选项可以防止这种情况......一种是检查EventHandler中的OriginalSource,另一种是处理ComboBox上的事件并将其Handled属性设置为true,这样它就不会被DataGrid处理程序捕获同样。
另一种更好的解决方案是不处理代码隐藏中的选择事件,除非有一个非常可靠的原因。最好将DataGrid的ItemsSource绑定到表示原始集合的ICollectionView(例如ListCollectionView); ICollectionView的CurrentItem自动与DataGrid中的选定行同步,您可以在ICollectionView上处理选择更改的事件,使其更容易(并且可单元测试,与UI实现等有些分离)。这不适用于多个选择,但如果您一次只能选择一行,它应该可以很好地工作。