我对 wpf 事件有疑问。 在 xaml 中,我有以下带有 selectionchanged 事件的组合框:
<ComboBox Grid.Column="1" Grid.Row="1" Name ="comboBox"
SelectedItem="{Binding CurrentEventBinding.ControlId, ValidatesOnDataErrors=True}"
ItemsSource="{Binding ControlsNames}" SelectionChanged="ComboboxSelectionChanged">
在代码隐藏中,我有以下代码:
private void ComboboxSelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) {
(DataContext as EventBindingEditViewModel).VmCommands.UpdateSourceCommand.Execute(null);
}
我有以下工作场景:
窗口.ShowDialog(); -> ComboboxSelectedChanged(引发事件)-> CloseWindow();
然后再次:Window.ShowDialog(); -> ComboboxSelectedChanged(事件被触发两次)
如果我在即时窗口中写入 sender.GetHashCode()
,它会第一次返回当前窗口中组合框的哈希码,第二次返回“死”窗口的哈希码。
因此,随着窗口的显示,事件被引发了很多次。看起来旧的组合框没有被处理或类似的东西。
希望你能理解我的问题。
提前致谢!
最佳答案
原因是您正在使用绑定(bind),并且在窗口关闭后它仍然有效。然后您在一个窗口中更改所选项目,它通过绑定(bind)更改另一个窗口(已关闭)中的所选项目。要解决此问题,您应该在关闭的窗口中设置 DataContext = null。或者你可以每次都使用同一个窗口,只是不关闭它,而是隐藏它。
关于wpf窗口事件在窗口关闭后继续引发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700538/