C# – 如何在MVVM中处理XAML键盘?

直到现在,我正在使用.xaml.cs来处理输入.

这是我的xaml头代码:

<Window x:Class="My_Windows_App.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:My_Windows_App.ViewModel"
Title="MainWindow" Height="600" Width="900"
Keyboard.KeyDown="keyDownEventHandler" Keyboard.KeyUp="keyUpEventHandler">

这是MainWindow.xaml.cs代码的一部分:

public partial class MainWindow : Window
    {
        private bool pushToTalk;

        public void keyDownEventHandler(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.LeftCtrl)
                pushToTalk = true;
        }

        public void keyUpEventHandler(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.LeftCtrl)
                pushToTalk = false;
        }
}

我怎样才能在MVVM中实现同样的东西?
因为据我所知,我们不能绑定一个方法,只有属性,对吧?

输入处理是View关注点,而不是ViewModel关注点,为什么要将其移动到ViewModel?

相反,将应用程序/业务逻辑委托给ViewModel,同时在视图中保持键盘输入处理:

public partial class MainWindow : Window
{
    private MyViewModel ViewModel;

    public MainWindow()
    {
        ViewModel = new MyViewModel();
    }


    public void keyDownEventHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.LeftCtrl)
            ViewModel.PushToTalk = true;
    }

    public void keyUpEventHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.LeftCtrl)
            ViewModel.PushToTalk = false;
    }
}

请注意我是如何将PushToTalk属性移动到ViewModel的,因为它实际上是应用程序逻辑的一部分而不是UI,同时将键盘事件保持在View级别.这并没有打破MVVM,因为你没有混合UI和应用程序逻辑,你只是把东西放在他们真正属于的地方.

相关文章
相关标签/搜索