多个 Windows 的 RoutedCommand

RoutedCommand for multiple Windows

查看 Google 结果已经好几个小时了,我发现的只是如何使用 RoutedCommand 捕获鼠标点击和键盘快捷键来执行相同操作的示例。

我已经阅读了一些关于 RoutedCommand 的资料,例如 MSDN and https://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/,如果我仍然理解正确,它也应该能够做我需要的事情:

  1. 单击 Window2
  2. 中的按钮
  3. Window2
  4. 中的调用方法
  5. Window1
  6. 中的调用方法
  7. 调用 Window3 中的方法 etc.pp.

用例是一个设置 window,它包含语言设置,在设置中单击“确定”后,所有活动 windows 都应更改其语言字符串。我提出了一个方法,它使用语言标识符重新加载字符串。

所以一般来说,我希望 Window2 中的 ButtonClick 将调用方法 "ChangeLanguage(lng)" 的命令传递给所有活动的 Windows,无论是父 MainWindow 还是另一个与设置完全无关的 ChildWindow。 Window 类 有自己的 ChangeLanguage() 函数来改变自己的字符串。

我想知道在这种情况下使用自定义 EventHandler 是否会更好并以某种方式使其全局化以便每个活动 Window 将监听在设置中更改语言时触发的事件 Window。我在另一个问题 here 中找到了一个全局 CommandHandler 的示例,但我认为这不适用于事件。

  1. 如果您的视图对象嵌套在根控件中,并且您单击放置在根控件中的按钮,您可以创建 TunnelingRoutedEvent,它将沿着可视化树向下移动。在 Window1,Window2 等你处理这个事件。
  2. 您可以创建静态委托,Window1、Window2 等中的方法将加入其中,一旦委托被调用,所有关联的方法也会被调用。
  3. 如果您使用的是 PRISM,CompositeCommand 就是您要查找的内容。