首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >处理从主窗口中的模式对话框引发的冒泡事件

处理从主窗口中的模式对话框引发的冒泡事件
EN

Stack Overflow用户
提问于 2011-10-19 17:23:22
回答 3查看 1.3K关注 0票数 1

我的WPF应用程序中有一个模式对话框,允许用户登录到服务器。该对话框只包含一个用户控件,该控件处理所有登录内容(UI、web服务调用,以及在调用返回时引发路由事件)。

一切都运行得很好,我可以在对话框中处理我的事件(登录成功后关闭对话框)。但是,我不能在我的主应用程序中处理事件(一旦用户登录,我就应该刷新UI )。

如何在引发事件的窗口之外截获此类路由事件(如果可能的话)?如果不可能,通常的处理方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-20 06:31:37

路由事件不会从新窗口发送到所有者。RoutedCommands也不能直接工作。但是Binding%s可以工作!

当您设置childWindow.OwnerWindow = Application.Current.MainWindow时,childWindow将通过其OwnerWindow属性逻辑连接到MainWindow。

您可以使用它绑定到OwnerWindow的ViewModel命令并执行该命令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <Window x:Class="...ChildWindow"
          ... >
      <Button Command="{Binding Path=OwnerWindow.DataContext.SaveCommand,
                                RelativeSource={RelativeSource
                                    AncestorType={x:Type Window}}}"
              Content="Execute Owner's Save Command" />
  </Window>
票数 2
EN

Stack Overflow用户

发布于 2011-10-19 17:31:07

路由的事件不会从一个窗口转到另一个窗口。

在子窗口上定义公共CLR事件。当主窗口实例化该子窗口时,它应该在显示子窗口之前挂钩该事件的处理程序。然后,孩子只需要在适当的时候引发这个事件。

票数 1
EN

Stack Overflow用户

发布于 2011-10-19 17:33:22

我不明白你怎么能在不同的窗口之间自动冒泡一个路由的事件,因为它们不在同一逻辑树中。复杂的UI应用程序倾向于通过EventAggregator模式的一些实现来处理这种视图间通信,因此,如果您发现需要在视图之间进行大量通信,那么它可能是处理此类场景的一种更简洁的方法。Prism框架包含一个EventAggregator实现,但如果需要,一个用于简单场景的手写实现应该不会太难。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7825379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文