Wpf PreviewMouseDown拦截SelectedItemChanged事件

Wpf PreviewMouseDown拦截SelectedItemChanged事件,wpf,Wpf,我有一个TreeView,它是WPF应用程序导航的主要方式 当用户在树视图中选择一个新项目时,如果他们离开的页面有未保存的信息,我们将提供取消移动的机会,以继续处理/保存当前数据。这当前发生在PreviewMouseDown事件处理程序中 然而,在这里弹出一个提供yes/no/cancel选项的对话框似乎会阻止SelectedItemChanged事件的实际触发,我认为这是因为发生了另一次鼠标单击。因此,如果他们拒绝留在当前页面上的选项,它仍然不会改变 是否有任何方法可以从PreviewMous

我有一个TreeView,它是WPF应用程序导航的主要方式

当用户在树视图中选择一个新项目时,如果他们离开的页面有未保存的信息,我们将提供取消移动的机会,以继续处理/保存当前数据。这当前发生在PreviewMouseDown事件处理程序中

然而,在这里弹出一个提供yes/no/cancel选项的对话框似乎会阻止SelectedItemChanged事件的实际触发,我认为这是因为发生了另一次鼠标单击。因此,如果他们拒绝留在当前页面上的选项,它仍然不会改变

是否有任何方法可以从PreviewMouseDown中重新触发事件,以便仍然调用SelectedItemChanged事件

是否有任何方法可以从PreviewMouseDown中重新触发事件,以便仍然调用SelectedItemChanged事件

手动调用事件处理程序会更容易,就像调用方法一样。或者更好的方法是,将事件处理程序中的代码分解为一个独立的方法,您可以从PreviewMouseDown处理程序和SelectedItemChanged处理程序调用该方法


另一个选项是更改SelectedItem或IsSelected属性,以便事件再次激发。

除非我遗漏了某些内容,否则我不确定最终是否会从遗漏的事件中获得所需的信息。PreviewMouseDown事件不知道新SelectedItem将显示什么。您可以使用MouseButtonEventArgs的OriginalSource属性确定要选择的项。我可以在OriginalSource.DataContext上设置IsSelected,这很好,除非我点击标签,使我的数据上下文成为标签中的文本-你能从那里遍历回树吗?请参阅我回答中的FindParent:谢谢。就我的具体情况而言,我最终手动爬回树上,虽然不愉快,但完成了工作。