WPF Datagrid SelectionChanged事件在加载行时多次触发

WPF Datagrid SelectionChanged事件在加载行时多次触发,wpf,wpf-controls,binding,wpfdatagrid,Wpf,Wpf Controls,Binding,Wpfdatagrid,当我在WPF DataGrid中使用DataGridComboxColumn时,DataGrid SelectionChanged事件会在WPF DataGrid中加载行时根据行数触发多次 我怎样才能阻止这一切?正因为如此,我面临着性能问题。这完全取决于绑定的设置方式 例如,如果您有一个ObservableCollection,并且在加载数据时向其中添加了项,那么您可能会遇到这种问题。有多种解决方案,但我宁愿找出问题所在,也不愿键入几公里长的文本,因此,如果您能提供更多详细信息,我将用我对解决方

当我在WPF DataGrid中使用DataGridComboxColumn时,DataGrid SelectionChanged事件会在WPF DataGrid中加载行时根据行数触发多次


我怎样才能阻止这一切?正因为如此,我面临着性能问题。

这完全取决于绑定的设置方式

例如,如果您有一个ObservableCollection,并且在加载数据时向其中添加了项,那么您可能会遇到这种问题。有多种解决方案,但我宁愿找出问题所在,也不愿键入几公里长的文本,因此,如果您能提供更多详细信息,我将用我对解决方案的最佳猜测来回答

编辑:在看到这个示例后,我发现了问题所在:DataGrid中有一个DataGridComboxColumn,其SelectedValue绑定到一个属性;执行绑定时,将触发ComboBox的SelectionChanged事件,并由DataGrid上的处理程序捕获。有几种方法可以防止这种情况。。。一个是检查EventHandler中的OriginalSource,另一个是处理ComboBox上的事件,并将其Handled属性设置为true,以便DataGrid处理程序也不会捕获它


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

这完全取决于您如何设置绑定

例如,如果您有一个ObservableCollection,并且在加载数据时向其中添加了项,那么您可能会遇到这种问题。有多种解决方案,但我宁愿找出问题所在,也不愿键入几公里长的文本,因此,如果您能提供更多详细信息,我将用我对解决方案的最佳猜测来回答

编辑:在看到这个示例后,我发现了问题所在:DataGrid中有一个DataGridComboxColumn,其SelectedValue绑定到一个属性;执行绑定时,将触发ComboBox的SelectionChanged事件,并由DataGrid上的处理程序捕获。有几种方法可以防止这种情况。。。一个是检查EventHandler中的OriginalSource,另一个是处理ComboBox上的事件,并将其Handled属性设置为true,以便DataGrid处理程序也不会捕获它


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

嗨,Alex,我创建了一个示例,并在以下路径下上载。希望它能提供更多信息。嗨,Alex,我创建了一个示例并上传到以下路径下。希望它能提供更多信息。您能否告诉我如何“处理组合框上的事件并将其处理的属性设置为true”您能否告诉我如何“处理组合框上的事件并将其处理的属性设置为true”