WPF Prism (MVVM) 中的全局热键/快捷方式管理器

本文关键字:快捷方式 管理器 全局 Prism MVVM WPF | 更新日期: 2023-09-27 18:32:40

如何在

wpf prism 应用程序中创建全局热键绑定,哪些模块可以动态添加热键?

我尝试了以下方法:

Window.InputCommands绑定到我的热键类的ObservableCollection(使用
共同服务作为模型) --> 输入命令不包含可访问的 setter

使用PreviewKeyDownEvent(事件到命令) --> 没有可靠的方法来确定是否按下了 Ctrl 或 Alt(通过 我自己在视图模型中)。我不喜欢这种方法。

有没有简单的方法来动态添加键绑定?

WPF Prism (MVVM) 中的全局热键/快捷方式管理器

我不知道

如何在纯 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 设计,以坚持我上面示例暂时忽略的视图和视图模型分离。