0

问题

我目前正在尝试找到一种兼容 MVVMLight 的方式来在我的 WP8 应用程序中使用手势。具体来说,我只想检测滑动/轻弹并将其绑定到我的视图模型中的 RelayCommand。多年来是否有任何我不知道的最新解决方案?

先前的研究

我之前做过一些研究,得出的结果大多已经过时或不复存在。IE:

  1. 旧的 Stackoverflow 问题
  2. 包含不存在代码的 Clarity Consulting 博客文章
  3. toolkit:GestureListenerWindows Phone Toolkit 支持手势,但要求您将 ViewModel 与 View 耦合。

编辑

注意:发现toolkit:GestureListener已弃用。

4

2 回答 2

1

Joost Van Schaaik 在 wp7 上创建了这样的行为:http: //dotnetbyexample.blogspot.be/2011/03/simple-windows-phone-7-silverlight.html

可以通过@localjoost在推特上联系他

于 2013-10-29T13:22:29.157 回答
0

找到了我的问题的答案。

而不是 using toolkit:GestureListener,我发现EventToCommandwith ManipulationDeltaorManipulationCompleted也可以:

在 XAML 中

<i:Interaction.Triggers>
    <i:EventTrigger EventName="ManipulationDelta">
    <Command:EventToCommand Command="{Binding SlideOutDeltaCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
    </i:EventTrigger>
        <i:EventTrigger EventName="ManipulationCompleted">
    <Command:EventToCommand Command="{Binding SlideOutCompletedCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>
</i:Interaction.Triggers>

通过将 EventArgs 传递给 ViewModel,您可以检测是否已发出滑动手势:

在视图模型中

定义中继命令

 public RelayCommand<ManipulationDeltaEventArgs> SlideOutDeltaCommand
    {
        get;
        private set;
    }

定义 Execute() 方法

 private void OnSlideDelta(ManipulationDeltaEventArgs e)
    {
        var delta = e.CumulativeManipulation.Translation;

        //If Change in X > Change in Y, its considered a horizontal swipe
        var isDeltaHorizontal = Math.Abs(delta.X) > Math.Abs(delta.Y) ? true : false;
    }

在 ViewModel 构造函数中注册您的命令

public MainViewModel()
{
    SlideOutDeltaCommand = new RelayCommand<ManipulationDeltaEventArgs>((e) => OnSlideDelta(e));
}
于 2013-11-03T13:28:54.223 回答