C# 使用InputBinding触发代码隐藏事件

C# 使用InputBinding触发代码隐藏事件,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,向MVVM应用程序添加快捷键时卡住。已搜索解决方案,但找不到DataContext阻止触发命令的示例。这让我觉得我可能是在用错误的方式做这件事 请参见下面的示例 窗口XAML <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:

向MVVM应用程序添加快捷键时卡住。已搜索解决方案,但找不到DataContext阻止触发命令的示例。这让我觉得我可能是在用错误的方式做这件事

请参见下面的示例

窗口XAML

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1" x:Class="WpfApplication1.MainWindow"
        Title="Stackoverflow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Window.InputBindings>
        <KeyBinding Key="F" Modifiers="Control"/>
    </Window.InputBindings>
    <Grid>
        <Button Content="Interface Action" Click="ButtonBase_OnClick"/>
    </Grid>
</Window>
尝试将输入绑定链接到按钮,最佳设计选择是什么?以下是我能想到的选项:

  • 将代码隐藏设置为数据上下文,创建代码隐藏属性ViewModel并在XAML树中定义更深的路径

  • 在代码隐藏中写入一个按键事件,并从那里触发该事件

  • 这两个选项要么在美学上是错误的,要么会导致编写大量额外的代码。从MVVM的角度来看,什么是最好的选择?

    如果使用“代码隐藏”而不是“代码回退”,效果会更好。没有人知道“代码回退”是什么意思。也许有一些,但每个人都说“代码隐藏”。
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    
        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            // Do Work
        }
    }