WPF Prism (MVVM) 中的全局热键/快捷方式管理器
本文关键字:快捷方式 管理器 全局 Prism MVVM WPF | 更新日期: 2023-09-27 18:32:40
如何在
wpf prism 应用程序中创建全局热键绑定,哪些模块可以动态添加热键?
我尝试了以下方法:
将Window.InputCommands
绑定到我的热键类的ObservableCollection
(使用
共同服务作为模型) --> 输入命令不包含可访问的 setter
使用PreviewKeyDownEvent
(事件到命令) --> 没有可靠的方法来确定是否按下了 Ctrl 或 Alt(通过 我自己在视图模型中)。我不喜欢这种方法。
有没有简单的方法来动态添加键绑定?
我不知道
如何在纯 MVVM 中轻松动态添加/删除。我想从代码隐藏访问 InputBindings,正如您适当注意到缺少设置器一样。 但是,您可能倾向于仅通过查看以下两个来破坏这种情况的设计:输入绑定和按键手势。因此,请考虑为 shell 创建自定义控件。
public ObservableCollection<HotkeyModel> Hotkeys { get; private set; }
public class HotkeyWindow : Window
{
HotKeys = new ObservableCollection<HotkeyModel>();
HotKeys.CollectionChanged += new NotifyCollectionChangedEventHandler(HotkeysChanged);
}
void HotkeysChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if(e.Action == NotifyCollectionChangedAction.Add)
{
foreach(HotkeyModel hk in e.NewItems)
this.InputBindings.Add(new InputBinding(hk.Command), new KeyGesture(hk.Key, hk.Modifier));
}
else if(e. Action == NotifyCollectionChangedAction.Remove)
...
}
不要设置输入绑定,而是添加和删除。 保留热键的可观察集合并侦听 CollectionChanged 事件。 添加和删除它们时,可以在输入绑定中添加和删除它们。 创建 KeyGesture 时,可以设置 Keyboard.Modifiers。
因此,您可以采用这个概念并推断为具有附加/依赖项属性和附加行为等的真实而彻底的 MVVM 设计,以坚持我上面示例暂时忽略的视图和视图模型分离。