【发布时间】:2017-03-23 09:37:52
【问题描述】:
我正在使用 C#、WPF、ReactiveUI 和 Prism 创建具有许多不同视图(用户控件)的应用程序。在某些视图上,有一些按钮/菜单项绑定到视图模型中的命令。我希望这些按钮也可以使用 ctrl+s 等组合键来激活......
我的尝试
-
InputBindings但这仅在定义这些输入绑定的视图具有焦点时才有效。 -
ApplicationCommands像ApplicationCommands.Close这样的预定义命令似乎很有用。我可以在视图和视图模型中引用它们,但我不知道如何在我的视图模型中订阅它们。看来我必须先“激活”命令,或者至少更改 CanExecute,因为绑定到此类命令的任何按钮都保持禁用状态。
我的愿望
假设我有一个视图,它表示顶部菜单栏MenuView,带有一个按钮myButton,对应的视图模型MenuViewModel 带有一个命令myCommand。我想将myButton 绑定到myCommand 并将键盘快捷键ctrl+u 绑定到myCommand 而MenuView 不知道其视图模型的实现。只要包含MenuView 的窗口有焦点,键盘快捷键就应该起作用。
我并不关心键盘快捷键是在视图中还是在视图模型中。
【问题讨论】:
-
当我必须将命令绑定到键盘快捷键时,我更喜欢 InputBindings。只是为了确定:我猜您的主窗口不知道您的任何控件,因为它们是通过 PRISM 加载的?这就是为什么您不想将 InputBindings 放在窗口中?
-
您是否尝试过使用例如为您的
InputBindings 附加行为(如this one),以使它们“独立于焦点”? -
@MightyBadaboom 完全正确!
-
@dymanoid 该解决方案实际上看起来很完美!我遇到了很多堆栈溢出问题,但我还没有看到那个问题。我想我们现在应该将其作为副本关闭?
标签: c# wpf prism reactiveui