通过长按按钮调用mvvm命令

时间:2014-05-01 12:06:51

标签: c# windows-phone-8

我有一个按钮

<Button Command="{Binding MyCommand}" />

但是,当我长按按钮以及单击它时,MyCommand被击中。有没有办法解决这个问题?

感谢

1 个答案:

答案 0 :(得分:1)

您可以做的是:

  1. 引用System.Windows.Interactivity dll。
  2. 在xaml代码中定义命名空间:

    的xmlns:I =&#34; CLR-名称空间:System.Windows.Interactivity;装配= System.Windows.Interactivity&#34;

  3. 然后在您的xaml代码中连接此事件触发器:

  4.    <i:Interaction.Triggers>
           <i:EventTrigger EventName="Tap" SourceName="btnTest">
               <i:InvokeCommandAction Command="{Binding DoSomething}" />
           </i:EventTrigger>
       </i:Interaction.Triggers>
    

    在这种情况下,EventName是&#34;点按&#34;,SourceName是x:您要观看的按钮的名称。像这样:

    <Button Content="Click me" x:Name="btnTest"/>
    

    然后在你的ViewModel中,你可以将它连接到ICommand,我通常使用RelayCommand:

        private ICommand _DoSomething;
        public ICommand DoSomething
        {
            get
            {
                if (_DoSomething == null)
                {
                    _DoSomething = new RelayCommand(DoSomethingExecute);
                }
    
                return _DoSomething;
            }
        }
    
        private void DoSomethingExecute()
        {
            Dispatcher.BeginInvoke(() =>
                {
                    MessageBox.Show("btnTest on the tap event");
                });
        }
    

    我测试过,只捕获了点击事件,而不是长按事件。