在 MVVM 中处理关键新闻和发布事件



我正在使用MVVM模式开发WPF应用程序。我需要单独处理密钥按下&发布事件,(例如,在媒体播放器中,FWD/REV发生,直到用户保留时按键停止键为止)。搜索很多后,我仍然找不到任何方法。任何人都可以帮忙。

感谢您的建议。我通过使用互动性触发器&找到了一种方法来做到这一点。依赖性属性。以下是命令的依赖性属性。

public class EventToCommand : TriggerAction<DependencyObject>
{
    public ICommand Command
    {
        get { return (ICommand)GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }
    // Using a DependencyProperty as the backing store for Command.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty CommandProperty =
        DependencyProperty.Register("Command", typeof(ICommand), typeof(EventToCommand), new PropertyMetadata(null));
    protected override void Invoke(object parameter)
    {
        if (Command != null
            && Command.CanExecute(parameter))
        {
            Command.Execute(parameter);
        }
    }
}

然后在下面的XAML中使用它:

    <i:Interaction.Triggers>
    <i:EventTrigger EventName="KeyUp">
        <ap:EventToCommand Command="{Binding KeyReleaseCommand}"></ap:EventToCommand>
    </i:EventTrigger>
    <i:EventTrigger EventName="KeyDown">
        <ap:EventToCommand Command="{Binding KeyDownCommand}"></ap:EventToCommand>
    </i:EventTrigger>
</i:Interaction.Triggers>

keyReleaseCommand&amp;keydowncommand是您的ViewModel中的RelayCommand。

    public MainViewModel()
    {
        KeyDownCommand = new RelayCommand<KeyEventArgs>(OnKeyDown, null);
        KeyReleaseCommand = new RelayCommand<KeyEventArgs>(OnKeyRelease, null);
    }
    private void OnKeyRelease(KeyEventArgs args)
    {
        if (args.KeyboardDevice.Modifiers == ModifierKeys.Alt)
        {
            if (args.SystemKey == Key.Left)
            {
                Trace.WriteLine("ALT+LEFT Released");
            }
        }
    }
    public void OnKeyDown(KeyEventArgs args)
    {
        if (args.IsRepeat)
            return;
        if (args.KeyboardDevice.Modifiers == ModifierKeys.Alt)
        {
            if(args.SystemKey == Key.Left)
            {
                Trace.WriteLine("ALT+LEFT");
            }
        }
    }

我猜,您将将Command绑定到Button。如果您希望命令反复触发,则可以使用重复按钮。它是为此目的而设计的。您可以将您的命令绑定到Command属性。它将反复发射您的方法,直到释放RepeatButton

相关内容

  • 没有找到相关文章

最新更新