在WPF中动态添加KeyBindings

Dan*_*ley 5 c# wpf mvvm

是否可以基于绑定数据源动态定义KeyBindings?我有一个带网格的屏幕,我允许用户为它保存各种布局.我目前将网格上下文菜单绑定到布局名称(通过ViewModel),允许它们通过菜单切换布局.

但是,我想将每个布局与快捷键相关联.由于快捷键是由用户定义的,我不能简单地<KeyBinding>在窗口XAML中添加许多元素.另一个问题是绑定需要提供布局的名称作为命令参数.

有没有办法<KeyBinding>从动态源动态创建一系列元素?

作为测试,我已经将绑定静态地添加到我的视图XAML中,并且它们工作正常,但这只是为了测试我的概念:

<UserControl.InputBindings>
    <KeyBinding Key="F7" Command="{Binding MyCommand}" CommandParameter="My Layout Name"/>
    <KeyBinding Key="F8" Command="{Binding MyCommand}" CommandParameter="My Other Layout Name"/>
</UserControl.InputBindings>
Run Code Online (Sandbox Code Playgroud)

小智 0

有几种方法可以做到这一点,最简单的一种方式是创建一个转换器,它将根据命令名称返回一个键(本质上它是一个查找,您的布局名称是一个键,Key 是一个值)。如果您需要处理更复杂的客人,它会变得稍微复杂一些,请大声喊叫,我将为它制作一个示例:

这是 XAML:

<Grid.InputBindings>
<KeyBinding Key="{Binding Converter={StaticResource converter}, ConverterParameter=My Other Layout Name}" Command="{Binding MyCommand}" />
</Grid.InputBindings>
Run Code Online (Sandbox Code Playgroud)