【问题标题】:PreviewMouseDown Intercepting SelectedItemChanged EventPreviewMouseDown 拦截 SelectedItemChanged 事件
【发布时间】:2019-03-21 23:00:48
【问题描述】:

我有一个TreeView,它是浏览 WPF 应用程序的主要方式。

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

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

有没有办法从PreviewMouseDown 中重新触发事件,以便仍然调用SelectedItemChanged 事件?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    有没有办法从 PreviewMouseDown 中重新触发事件,以便仍然调用 SelectedItemChanged 事件?

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

    另一种选择是更改SelectedItemIsSelected 属性,以便再次触发事件。

    【讨论】:

    • 除非我遗漏了什么,否则我不确定我是否会从我遗漏的事件中获得所需的信息。 PreviewMouseDown 事件不会知道新的 SelectedItem 是什么
    • 您可以使用 MouseButtonEventArgs 的 OriginalSource 属性确定要选择的项目。
    • 我可以在 OriginalSourcce.DataContext 上设置 IsSelected 并且工作正常,除非我单击导致我的数据上下文成为标签中的文本的标签 - 你可以从那里遍历树吗?
    • 在我的回答中查看 FindParent:stackoverflow.com/questions/45693549/…
    • 谢谢。对于我的具体情况,我最终手动爬回树上,虽然不愉快,但完成了工作。
    猜你喜欢
    • 2015-11-05
    • 2021-06-27
    • 2019-06-04
    • 1970-01-01
    • 2011-04-10
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多